php数组练习十六道题

<?php
/**
 * 1、写函数创建长度为10的数组。数组中的元素为递增的奇数。首项为1。
 */
$ary = range(1, 10);
//Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 )
print_r($ary);

/**
 * 2、创建长度为10的数组,数组中的元素为递增的等比数,比值为3。首项为1
 */
function myfun($n){
	return pow(3, $n-1);
}
$ary = range(1, 10);
$result = array_map(‘myfun‘,$ary);
echo ‘<br>‘;
//Array ( [0] => 1 [1] => 3 [2] => 9 [3] => 27 [4] => 81 [5] => 243 [6] => 729 [7] => 2187 [8] => 6561 [9] => 19683 )
print_r($result);

/**
 * 3、求数组中最大数所在的下标;
 * $arr = array(1,5,67,8,4,3,45,6,887,2);
 */
$arr = array(1,5,67,8,4,3,45,6,887,2);
$max = $arr[0];//假设第一个数是最大的
$index = 0;//记录最大数的key值,即下标
foreach ($arr AS $key=>$val) {
	if ($max < $val) {
		$max = $val;
		$index = $key;
	}
}
//最大数是:887,其下标是:8
echo ‘<br>最大数是:‘.$max . ‘,其下标是:‘ . $index;
/* $mval = max($arr);
echo ‘<br>‘;
print_r(array_search($mval, $arr)); */

/**
 * 4、创建一个长度为10的数组,数组中的元素满足斐波拉齐数列的规律;
 */
$arr = array(1,1);
for ($i=2; $i<10; $i++) {
	$arr[] = $arr[$i-1]+$arr[$i-2];
}
echo ‘<br>‘;
//Array ( [0] => 1 [1] => 1 [2] => 2 [3] => 3 [4] => 5 [5] => 8 [6] => 13 [7] => 21 [8] => 34 [9] => 55 )
print_r($arr);

/**
 * 5、计算数组中最大数和最小数的差;
 */
$arr = array(1,5,67,8,4,3,45,6,887,2);
/*系统函数简单实现
 *
$minv = min($arr);
$maxv = max($arr);
echo ‘<br>‘;
echo ‘最大数是:‘ . $maxv .‘,最小数是:‘.$minv.‘,差是:‘.($maxv-$minv);
 */

/*不使用系统函数实现*/
$max = $arr[0];//假设第一个数是最大的
$min = $arr[0];//假设第一个数也是最小的
foreach ($arr AS $key=>$val) {
	if ($max < $val) {
		$max = $val;
	} elseif ($min > $val) {
		$min = $val;
	}
}
echo ‘<br>‘;
//最大数是:887,最小数是:1,差是:886
echo ‘最大数是:‘ . $max .‘,最小数是:‘.$min.‘,差是:‘.($max-$min);

/**
 * 6、写一个方法,将一个长度超过10的数组最后5项直接截取,不改变顺序直接变为前5项,
 * 如{1,2,3,4,5,6,7,8,9,10,11,12}在经过方法后变为:{8,9,10,11,12,1,2,3,4,5,6,7}
 */
function arrayHandel(&$ary, $count = 5) {
	if (!(is_array($ary) && count($ary)>10 && count($ary)>$count)) {
		return false;
	}
	$len = count($ary);
	while ($count>0) {
		$i = $len-1;
		$count--;
		array_unshift($ary, $ary[$i]);
		array_pop($ary);
	}
}
$array = array(1,2,3,4,5,6,7,8,9,10,11,12,13);
echo ‘<br>‘;
arrayHandel($array);
//Array ( [0] => 9 [1] => 10 [2] => 11 [3] => 12 [4] => 13 [5] => 1 [6] => 2 [7] => 3 [8] => 4 [9] => 5 [10] => 6 [11] => 7 [12] => 8 )
print_r($array);

/**
 *
 * 7、将两个数组连接成一个新数组;
 * array_combine($keys, $values) 一个作键,一个作值,但是两个数组个数必须一致,不然会返回false
 * array_merge($array1)  覆盖相同的键名
 * array_merge_recursive($array1) 不覆盖相同键名,组成以键名组成的数组集合
 *
 */
$arr1 = array(‘a‘=>123,‘b‘=>1234);
$arr2 = array(‘os‘=>‘linux‘,‘db‘=>‘mysql‘,‘language‘=>‘php‘,‘server‘=>‘nginx‘,‘b‘=>1256);
echo ‘<br>‘;
//Array ( [a] => 123 [b] => 1234 [os] => linux [db] => mysql [language] => php [server] => nginx )
print_r($arr1+$arr2);//$arr1会覆盖$arr2中相同键值,运算是从右至左,所以左边的覆盖右边
echo ‘<br>‘;
//boolean false
var_dump(array_combine($arr1,$arr2));//boolean false
echo ‘<br>‘;
//Array ( [a] => 123 [b] => 1256 [os] => linux [db] => mysql [language] => php [server] => nginx )
print_r(array_merge($arr1,$arr2));//$arr1和$arr2中的相同的元素被后一个$arr2的覆盖
echo ‘<br>‘;
//Array ( [a] => 123 [b] => Array ( [0] => 1234 [1] => 1256 ) [os] => linux [db] => mysql [language] => php [server] => nginx )
print_r(array_merge_recursive($arr1,$arr2));

/**
 * 数组逆序(不能直接使用rsort函数,不能生成新数组);
 */
$ary = array(‘apple‘,‘juice‘,‘orange‘,‘85‘,‘0‘,‘app‘,‘1‘,‘2‘,‘5‘,‘z‘);
/* rsort($ary);
echo ‘<br>‘;
print_r($ary); */
for ($i=0;$i<count($ary);$i++){
	for ($j=$i+1;$j<count($ary);$j++){
		if($ary[$i]<$ary[$j]){
			$temp = $ary[$i];
			$ary[$i] = $ary[$j];
			$ary[$j] = $temp;
		}
	}
}
echo ‘<br>‘;
//Array ( [0] => z [1] => orange [2] => juice [3] => apple [4] => app [5] => 85 [6] => 5 [7] => 2 [8] => 1 [9] => 0 )
print_r($ary);

/**
 * 9、在长度为10的升序有序数组中插入一个数字,组成新数组,保证数组顺序(不能直接使用sort)
 */
$arr = range(1, 40, 2);
function insertAry($ary, $val) {
	$endAry = array();
	$len = count($ary);
	$index = 0;
	if ($ary[$len-1] < $val) {//若插入数比数组中任意数大
		$ary[] = $val;
		$endAry = $ary;
		return $endAry;
	}
	while ($index<$len) {

		if ($ary[$index]>=$val){
			$endAry[$index++] = $val;
			for($i = $index;$i<$len+1;$i++){
				$endAry[$i] = $ary[$i-1];
			}
			break;
		} else {
			$endAry[$index] = $ary[$index];
		}
		$index++;
	}

	return $endAry;
}
echo ‘<br>‘;
//Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 [5] => 11 [6] => 13 [7] => 15 [8] => 17 [9] => 19 [10] => 21 [11] => 23 [12] => 25
//[13] => 27 [14] => 29 [15] => 31 [16] => 33 [17] => 35 [18] => 37 [19] => 39 [20] => 88 )
print_r(insertAry($arr,88));

/**
 * 10、将一个无序数组排列成升序数组;(冒泡排序)
 */

$arr = array(888,-9,1,11,5,67,8,4,3,45,6,887,2);
$len = count($arr);

for ($i=0; $i<$len; $i++) {
	for ($j=$len-1; $j>$i; $j--) {
		if ($arr[$j]<$arr[$j-1]) {
			$temp = $arr[$j];
			$arr[$j] = $arr[$j-1];
			$arr[$j-1] = $temp;
		}
	}
}
echo ‘<br>‘;
//Array ( [0] => -9 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 8 [8] => 11 [9] => 45 [10] => 67 [11] => 887 [12] => 888 )
print_r($arr);

/*********选择排序************/
$arr = array(888,-9,1,11,5,67,8,4,3,45,6,887,2);
for ($i=0; $i<$len; $i++) {
	for ($j=$i+1; $j<$len; $j++) {
		if ($arr[$j]<$arr[$i]) {
			$temp = $arr[$j];
			$arr[$j] = $arr[$i];
			$arr[$i] = $temp;
		}
	}

}
echo ‘<br>‘;
//Array ( [0] => -9 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 8 [8] => 11 [9] => 45 [10] => 67 [11] => 887 [12] => 888 )
print_r($arr);

/**
 * 11、对有序数组进行洗牌操作;(不能直接使用shuffle函数)
 */
$arr = range(1, 40, 2);
echo ‘<br>‘;
echo ‘<br>$arr打乱前:‘;
//$arr打乱前:Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 [5] => 11 [6] => 13 [7] => 15 [8] => 17 [9] => 19 [10] => 21 [11] => 23 //[12] => 25 [13] => 27 [14] => 29 [15] => 31 [16] => 33 [17] => 35 [18] => 37 [19] => 39 )
print_r($arr);
function shuffleDemo($arr) {
	$resultAry = array();
	$len = count($arr);
	while ($len>0) {
		$index = rand(0, $len-1);
		$resultAry[] = $arr[$index];
		array_splice($arr, $index,1);
		$len--;
	}
	return $resultAry;
}
echo ‘<br>‘;
echo ‘<br>$arr打乱后:‘;
//$arr打乱后:Array ( [0] => 3 [1] => 33 [2] => 11 [3] => 15 [4] => 5 [5] => 39 [6] => 1 [7] => 25 [8] => 35 [9] => 29 [10] => 13 [11] => 27 //[12] => 23 [13] => 7 [14] => 37 [15] => 19 [16] => 9 [17] => 17 [18] => 31 [19] => 21 )
print_r(shuffleDemo($arr));

/**
 * 12、删除数组中指定位置的元素;(参考unset函数)
 */
function deleteAryElement(&$arr, $index){
	if (!(is_array($arr) && count($arr)>$index)) {
		return false;
	}
	unset($arr[$index]);
}
$arr = array(888,-9,1,11,5,67,8,4,3,45,6,887,2);
deleteAryElement($arr,2);
echo ‘<br>‘;
//Array ( [0] => 888 [1] => -9 [3] => 11 [4] => 5 [5] => 67 [6] => 8 [7] => 4 [8] => 3 [9] => 45 [10] => 6 [11] => 887 [12] => 2 )
print_r($arr);

/**
 * 13、将数组中素数删除组成新数组
 */
function filtFun($val) {//自定义过滤素数函数
	$flag = true;//判断是否是素数
	if (is_int($val)) {
		if ($val<=0) {
			$flag = false;
		}
		for ($i=$val-1;$i>1;$i--) {
			if ($val%$i==0) {
				$flag = false;
				break;
			}
		}
	} else {
		$flag = false;
	}
	return !$flag;
}
$arr = array(888,-9,1,11,5,67,8,4,3,45,6,887,2,‘a‘);
$rary = array_filter($arr, ‘filtFun‘);
echo ‘<br>‘;
//Array ( [0] => 888 [1] => -9 [6] => 8 [7] => 4 [9] => 45 [10] => 6 [13] => a )
print_r($rary);

/**
 * 14、写函数检查数组中是否存在某个元素(不能直接使用in_array)
 */
function exsitEle($arr, $value) {
	if (!(is_array($arr) && count($arr)>0)) {
		return false;
	}
	foreach ($arr AS $key=>$val) {
		if ($val==$value) {
			return true;
		}
	}
	return false;
}
$arr = array(888,-9,1,11,5,67,8,4,3,45,6,887,2,‘a‘,array(‘a‘=>14,‘b‘=>48));
//boolean true
var_dump(exsitEle($arr, array(‘a‘=>14,‘b‘=>48)));

/**
 * 15、写函数,向数组最后追加一个元素(不能直接使用array_push)
 */
$arr = array(888,-9,1,11,5,67,8,4,3,45,6,887,2,‘a‘,array(‘a‘=>14,‘b‘=>48));
$arr[] = ‘abcd‘;
echo ‘<br>‘;
//Array ( [0] => 888 [1] => -9 [2] => 1 [3] => 11 [4] => 5 [5] => 67 [6] => 8 [7] => 4 [8] => 3 [9] => 45 [10] => 6
//[11] => 887 [12] => 2 [13] => a [14] => Array ( [a] => 14 [b] => 48 ) [15] => abcd )
print_r($arr);

/**
 * 16、写函数,求数组中所有元素之和(不能直接使用array_sum)
 */
$arr = array(888,-9,1,11,5,67,8,4,3,45,6,-102);
function countAry($arr) {
	if (!(is_array($arr) && count($arr)>0)) {
		return false;
	}
	$sum = 0;
	foreach ($arr AS $key=>$val) {
		$sum += $val;
	}
	return $sum;
}
echo ‘<br>‘;
//927
print_r(countAry($arr));

  php数组功能非常强大,自己对php数组的练习学习。以后也可以在此加深印象,巩固学习!

时间: 2024-10-10 08:28:06

php数组练习十六道题的相关文章

C# Socket发送接收字节数组和十六16进制之间转换函数

近期在使用远程网络模块的时候, 需要用的Socket发送数据,远程模块指令为16进制. 官方提供的DEMO比较繁琐.不方便新手使用. 下面的转换函数可大大方便新手使用. // 16进制字符串转字节数组 格式为 string sendMessage = "00 01 00 00 00 06 FF 05 00 64 00 00"; private static byte[] HexStrTobyte(string hexString) { hexString = hexString.Rep

code第一部分数组:第十六题 数组表示数,加一操作

code第一部分数组:第十六题  数组表示数,加一操作 Given a number represented as an array of digits, plus one to the number. #include <iostream> #include <stdlib.h> #include <stdio.h> #include <vector> using namespace std; int * addone(int *a,int n) { in

六道题 : 1.设计一个函数,用来计算b的n次方 2.(n! = 1*2*3*4*...n) 3.(1! + 2! + 3! + 4! + ... + n!) 4.成绩 5. 数组中的元素逆序存放 6.九九乘法口诀

/* 设计一个函数,用来计算b的n次方 递归的2个条件: 1.函数自己调用自己 2.必须有个明确的返回值 */ #include <stdio.h> int pow2(int b, int n); int main() { int c = pow2(3, 2); printf("%d\n", c); return 0; } /* pow2(b, 0) == 1 pow2(b, 1) == b == pow2(b, 0) * b pow2(b, 2) == b*b == po

第十六课 数组的引入 【项目1-5】

第十六课 数组的引入 项目一 [数组大折腾] (1)创建一个有20个元素的整型数组,通过初始化,为数组中的前10个元素赋初值,然后通过键盘输入后10个元素的值,从前往后(从第0个到第19个)输出数组中元素的值,每5个元素换一行. [cpp] view plain copy print? int main( ) { int a[20]={...};  //初始化前10个元素 //键盘输入后10个元素的值 //由前往后输出数组中所有元素的值 printf("由前往后,数组中的值是:\n")

【OpenCV十六新手教程】OpenCV角检测Harris角点检测

本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/29356187 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本号: 2.4.9 本篇文章中,我们一起探讨了OpenCV

16. 蛤蟆的数据结构进阶十六排序实现之基数排序

16. 蛤蟆的数据结构进阶十六排序实现之基数排序 本篇名言:"社会犹如一条船 ,每人都要有掌舵的准备.--易卜生" 我们来看下基数排序. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47760601 1.  基数排序 基数排序(radix sort)属于"分配式排序"(distributionsort),又称"桶子法"(bucket sort)或bin sort,顾名思义,

46. 蛤蟆的数据结构笔记之四十六普里姆算法

46. 蛤蟆的数据结构笔记之四十六普里姆算法 本篇名言:"手莫伸 ,伸手必被捉.党与人民在监督 ,万目睽睽难逃脱.汝言惧捉手不伸 ,他道不伸能自觉 , 其实想伸不敢伸 ,人民咫尺手自缩.-- 陈毅" 连通图的生成树是一个极小的连通子图,它含有图中全部的顶点,但只有足以构成一棵树的n-1条边.所谓的最小成本,就是n个顶点,用n-1条边把一个连通图连接起来,并且使得权值的和最小.构造连通网的最小代价生成树,即最小生成树(Minimum Cost Spanning Tree). 找连通图的最

第一百二十六节,JavaScript,XPath操作xml节点

第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准DOM去查找XML中的节点方式,大大降低了查找难度,方便开发者使用.但是,DOM3级以前的标准并没有就XPath做出规范:直到DOM3在首次推荐到标准规范行列.大部分浏览器实现了这个标准,IE则以自己的方式实现了XPath. 一.IE中的XPath 在IE8及之前的浏览器,XPath是采用内置基于A

C Primer Plus (第五版) 第十六章 C预处理器和C库 编程练习

第十六章 C预处理器和C库 开发一个包含您需要使用的预处理器定义的头文件 //max.h  #ifndef _MAX_H_     #define _MAX_H_     #define MAX(X, Y) ((X)>(Y)?(X):(Y)) #endif 2.两个数的调和平均数可用如下方法得到:首先对两数的倒数取平均值,最后再取倒数.使用#define指令定义一个宏"函数"执行这个运算.编写一个简单的程序测试该宏. #include <stdio.h> #defin