数组函数
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的值,合并后的数组将不会出现red
echo '<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,分割数组,返回的是一个多维数组
语法:
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_splice
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);