批改状态:合格
老师批语:回调与增删改函数学完, 是不是觉得很嗨... 还得多写
array_merge,合并多个数组,将多个数组的元素合并在一个新的数组并返回语法:
array_merge(数组1,数组2,....);
如果合并的数组中具有相同的字符串索引,那么后面的元素值将会覆盖前面的元素值。如果包含的是相同的数字索引,则不会覆盖,如果只传入一个索引数组,则进行重置数组索引的操作。
示例:
<?php//传入具有相同字符串索引的数组echo '传入具有相同字符串索引的数组<br />';$arr1 = ['color'=>'red',2,4];$arr2 = ['a','b','color'=>'green',3];echo '原数组1:';print_r($arr1);echo '<br />原数组2:';print_r($arr2);echo '<br />合并后的数组:';$result = array_merge($arr1,$arr2);print_r($result);//上面两个数组中存在相同的字符串索引color,所以green会覆盖red的值,合并后的数组将不会出现redecho '<hr />';//只传入一个索引打乱的索引数组echo '只传入一个索引打乱的索引数组<br />';$arr3 = [4=>1,9=>2,20=>3];echo '原数组1:';print_r($arr3);echo '<br />合并后的数组:';$result = array_merge($arr3);print_r($result);//只传入一个索引数组,相当与是执行索引重置echo '<hr />';//传入一个索引打乱的索引数组,一个空数组echo '传入一个索引打乱的索引数组,一个空数组<br />';$arr4 = [];$arr5 = [4=>1,9=>2,20=>3];echo '原数组1:';print_r($arr4);echo '<br />原数组2:';print_r($arr5);echo '<br />合并后的数组:';$result = array_merge($arr4,$arr5);print_r($result);//只传入两个数组并且其中有个数组为空数组,相当于只传入一个数组,如果另一个是索引数组,则进行重置索引的操作echo '<hr />';

array_rand,从数组中随机取出一个或多个元素。如果只取一个,返回取出的元素的索引值。如果取出多个,则返回由这些元素的索引值组成的新数组语法:
array_rand(要操作的数组,[要取出的元素个数]);
如果没有设置个数,则默认为1个。
<?php//只取出一个值时echo '只取出一个值时';$arr = ['php','Java','JQuery','C++'];echo '<br />原数组:';print_r($arr);$result = array_rand($arr,1);echo '<br />取出的索引:';print_r($result);//只有一个值时,只返回一个索引值echo '<br />取出值对应的元素内容:'.$result.'=>'.$arr[$result];echo '<hr />';//取出多个值echo '取出多个值';$arr2 = ['php','Java','JQuery','C++','Ajax','Python'];echo '<br />原数组:';print_r($arr2);$result = array_rand($arr2,3);echo '<br />取出的索引:';print_r($result);//取出多个时,返回的是一个由取出索引组成的数组echo '<br />取出索引对应的元素内容:<br />';foreach($result as $v){echo $v.'=>'.$arr2[$v].'<br />';}

array_multisort,对多个数组或多维数组进行排序,返回的是布尔值。排序成功返回true,失败返回false语法:
array_multisort(要操作的数组1,[排序的顺序1,排序的类型1],要操作的数组2,[排序的顺序2,排序的类型2],...);
可以一次对一个、多个、多维数组进行排序。字符串索引不变,数字索引会被重新排列。排序的顺序和排序的类型可以省略不写。
排序顺序
| 名称 | 描述 |
|---|---|
SORT_ASC |
按照上升顺序排序,没有指定时,为默认值 |
SORT_DESC |
按照下降顺序排序 |
排序类型
| 名称 | 描述 |
|---|---|
SORT_REGULAR |
将元素按照通常方法进行比较,按照ASCII值排序,没有指定时,为默认值 |
SORT_NUMERIC |
将元素按照数值进行比较 |
SORT_STRING |
将元素按照字符串比较 |
示例:
<?php//对单个数组进行排序$arr1 = ['10',100,100,'a'];echo '原数组:';print_r($arr1);array_multisort($arr1);//对数组使用ASCII值升序排序echo '<br />按照ASCII值升序排序后的数组:';print_r($arr1);echo '<hr />';//对两个数组排序$arr2 = ['10',100,100,'a'];$arr3 = [1,2,'2',3,1];echo '原数组1:';print_r($arr2);echo '<br />原数组2:';print_r($arr3);array_multisort($arr1,SORT_DESC,SORT_NUMERIC,$arr2,SORT_DESC,SORT_NUMERIC);//对两个数组都使用按照数值进行降序排序echo '<br />按照数值降序排序后的数组1:';print_r($arr2);echo '<br />按照数值降序排序后的数组2:';print_r($arr3);echo '<hr />';//对二维数组排序的方式一$arr4 = [['id'=>1,2,'2',3],['10',100,100,'a']];echo '原数组元素1:';print_r($arr4[0]);echo '<br />原数组元素2:';print_r($arr4[1]);array_multisort($arr4[0],SORT_ASC,SORT_STRING,//按照字符串进行升序排序$arr4[1],SORT_DESC,SORT_NUMERIC//按照数值进行降序排序);echo '<br />按照字符串升序排序后的数组元素1:';print_r($arr4[0]);echo '<br />按照数值降序排序后的数组元素2:';print_r($arr4[1]);echo '<hr />';//对二位数组的排序方式二$arr5 = [['10',100,100,'a'],['id'=>1,2,'2',3,1]];echo '原数组元素1:';print_r($arr5[0]);echo '<br />原数组元素2:';print_r($arr5[1]);foreach($arr5 as $v){array_multisort($v,SORT_ASC,SORT_NUMERIC);//按照数值的进行升序排序}echo '<br />按照数值升序排序后的数组元素1:';print_r($arr2);echo '<br />按照数值升序排序后的数组元素2:';print_r($arr3);

按照方式一对多维数组进行排序时,如果每个数组的长度不一致,会有警告信息出现
array_diff,计算数组间的差集,返回的是一个新的数组语法:
array_diff(数组1,数组2,....);
对多个函数进行对比,遍历第一个数组中的元素值,如果在后面的所有的数组中都没有出现这个值,则将其保存到一个新的数组中,原数组的索引不变
示例:
<?php$arr = ['a'=>'green','red','blue',2];$arr2 = ['b'=>'green','yellow','red'];$arr3 = [2,3];echo '数组1:';print_r($arr);echo '<br />数组2:';print_r($arr2);echo '<br />数组3:';print_r($arr3);echo '<br />数组间的差值结果:';$result = array_diff($arr,$arr2,$arr3);print_r($result);

array_key_exists,判断给定的索引在数组中是否存在,返回一个布尔值。如果存在返回true,如果不存在返回false语法:
array_key_exists(索引,数组);
示例:
<?php$arr = ['name'=>'Lin','age'=>26];if(array_key_exists('name',$arr)){echo '该索引存在';}else{echo '该索引不存在';}

array_keys,返回数组中被查询元素值的索引,返回的是由索引组成的新数组语法:
array_keys(要操作的数组,[指定搜索的元素值,是否进行全等比较]);
第三个参数为布尔值类型,如果不进行全等(不仅值要相同,数据类型也要相同)比较的话,可以省略不写,否则传入TRUE。如果不传入要搜索的元素值,则默认返回该数组所有的索引
示例:
<?php$arr = ['first'=>'red','10','third'=>'green','black'];echo '原数组:';print_r($arr);//返回数组中所有的索引echo '<br />返回数组中所有的索引:';print_r(array_keys($arr));//返回元素值为10的索引echo '<br />返回元素值为10的索引:';print_r(array_keys($arr,10));//返回元素值为10且数据类型为数值的索引echo '<br />返回元素值为10且数据类型为数值的索引:';print_r(array_keys($arr,10,TRUE));

range,建立指定范围的数组,返回的时生成的数组语法:
range(开始值,结束值,步进值);
步进值就是每次增长的数值,如果没有指定值,默认为1
示例:
<?php$arr = range(10,70,7);print_r($arr);

array_combine,使用数组建立数组,返回的是建立的新数组语法:
array_combine(数组1,数组2);
数组1的元素值将作为新数组的索引,数组二的元素值将作为新数组的元素值
示例:
<?php$arr = ['name','age'];$arr2 = ['Lin',26];echo '数组1:';print_r($arr);echo '<br />数组2:';print_r($arr2);$new_arr = array_combine($arr,$arr2);echo '<br />建立的新数组:';print_r($new_arr);

语法:
array_chunk(要操作的数组,分割出来的数组的个数,是否保留原数组索引值)
不指定是否保留原数组索引,默认为不保留,即FALSE,如果要保留,则传入TRUE
示例:
<?php$arr = [1,2,3,4,5,6,7,8,9];echo '原数组:';print_r($arr);//分割成3个,保留原数组索引$result = array_chunk($arr,3,TRUE);echo '<br />分割成3个,保留原数组索引:';print_r($result);//分割成3个,不保留原数组索引$result2 = array_chunk($arr,3);echo '<br />分割成3个,不保留原数组索引:';print_r($result2);

array_intersect,计算数组的交集语法:
array_intersect(数组1,数组2,....);
遍历第一个数组,如果后面的数组有包含该元素值,则将该元素值保存至一个新的数组,索引保持不变
示例:
<?php$arr = ['a'=>'red','green','blue'];$arr2 = ['b'=>'green','yellow'];echo '数组1:';print_r($arr);echo '<br />数组2:';print_r($arr2);$new_arr = array_intersect($arr,$arr2);echo '<br />数组的交集:';print_r($new_arr);

array_filter,用回调函数过滤数组中的值,返回的是一个新数组语法:
array_filter(数组,回调函数);
将数组中的每个元素依次传入回调函数中,若回调函数返回的是TRUE,则该元素将会被保存在一个新的数组中,并且索引保持不变
示例:
<?php$arr = [0,1,2,7,23,56,60,77];echo '原数组:';print_r($arr);$result = array_filter($arr,function($v){//判断是否为偶数if($v % 2 == 0){return $v;}});echo '<br />过滤后的数组:';print_r($result);

array_map,将回调函数作用到给定数组的每个值上,返回新的值语法:
array_map(回调函数,数组1,数组2,....);
回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致
示例:
<?php$arr = ['red','yellow','blue'];echo '原数组:';print_r($arr);$result = array_map(function($v){return '<div style="width:100px;height:50px;background:'.$v.';"></div>';},$arr);echo '<br />处理后的结果:<br />';foreach($result as $v){echo $v;}

array_reduce,用回调函数将数组简化为单一的值语法:
array_reduce(要操作的数组,回调函数,[在开始处理前的第一个值]);
第三个参数也可以作为数组为空时的最后一个结果
示例:
<?php//模拟拼接查询条件,二维数组相当于从数据库中查询出来的数据$arr = [['id'=>101,'name'=>'Lin'],['id'=>102,'name'=>'Lin']];$result = array_reduce($arr,function($all,$v){$all.=$v['id'].',';return $all;});$sql = "select * from user where id in ( ".rtrim($result,',')." );";echo $sql;

array_walk,使用自定义回调对数组中成员逐个处理,返回布尔值语法:
array_walk(数组,回调函数);
回调函数有两个参数,第一个为元素值,第二个为键名
示例:
<?php//模拟拼接支付加密串$arr = ['api_version'=>'1.0','card_no'=>'20200424125X','notify_url'=>'php.cn'];echo '原数组:';print_r($arr);array_walk($arr,function(&$v,$k){$v=$k.'='.$v.'&';});echo '<br />处理后的结果:';print_r($arr);echo '<br />加密后的结果:';echo MD5(implode('',$arr));

array_slice,返回数组中选定的部分。语法:
array_slice(数组,起始位置,长度,[是否保留键名]);
如果没有传入第三个参数,默认重置索引,如果为TRUE则保留索引
示例:
<?php$arr = ["red","green","blue","yellow","brown"];echo '原数组:';print_r($arr);echo '<br />从正序选取的数组:';print_r(array_slice($arr,1,2));echo '<br />从倒序选取的数组:';print_r(array_slice($arr,-3,2));echo '<br />选取后的原数组:';print_r($arr);

array_splice,对数组中的元素进行删除或者替换,返回包含被移除元素的数组。语法:
array_splice(数组,起始位置,长度,[替换的内容]);
如果开始的位置为正数,则从前向后,反之则是从后向前。如果长度为0,则在开始的位置插入要替换的内容。如果没有替换的内容,则直接删除指定的元素。替换的内容可以是字符串也可以是数组
示例:
<?php//删除指定元素$arr = [1,2,3,4,5,6];echo '原数组:';print_r($arr);array_splice($arr,2);echo '<br />删除指定的元素后的数组:';print_r($arr);//添加元素到指定位置$arr = [1,2,3,4,5,6];echo '<br />原数组:';print_r($arr);array_splice($arr,2,0,7);echo '<br />添加指定的元素后的数组:';print_r($arr);//替换指定元素$arr = [1,2,3,4,5,6];echo '<br />原数组:';print_r($arr);array_splice($arr,2,3,[7,8]);echo '<br />替换指定的元素后的数组:';print_r($arr);

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号