<?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