这里整理了一些平常我使用较多的数组处理函数。PHP内置函数其实很多,大部分都很有用,对于数组这块,能使用内置函数来处理肯定是比自己写 效率高些的。
array_colum
array_column($array, $column_key, $index_key)用于返回输入数组中某个单一列的值,第三个参数可选。
$a = [
[
'no'=>'001' ,
'name'=>'amber',
'class'=>'10'
],
[
'no'=>'002' ,
'name'=>'suer',
'class'=>'9'
],
[
'no'=>'003' ,
'name'=>'ciky',
'class'=>'8'
],
];
dump(array_column($a,'name'));//取出name列
dump(array_column($a,'name','no'));//将name拿出来,用相应no列作为键名
array_chunk()
array_chunk( $array, $length, $preserve_keys ) 把一个数组分割为新的数组块,按输入的length分组,最后一个可能小于这个数量。第三个参数为是否保留原来的键名,默认false,即不保留。
$b = array('A', 'B', 'C', 'X', 'D', 'F', 'G', 'H', 'J');
dump(array_chunk($b, 3));
dump(array_chunk($b, 3, true));//保留原来键名
array_search() 与 in_array()
array_search() 函数与 in_array() 一样,在数组中查找一个键值(在一维数组范围内,多维数组可能需要使用递归)。输入参数相同:( $search, $array, $strict ),但返回值不同。array_search()找到返回匹配元素的键名,没找到则返回 false;in_array()找到返回true,否则返回false。第三个参数为是否严格匹配,默认false,即不严格匹配。
$c = ['no'=>'001' , 'name'=>'amber', 'class'=>'10'];
dump(in_array('amber', $c));
dump(array_search('amber', $c));
array_combine()
array_combine( $keys_array, $values_array) 通过合并两个数组(一个为键名数组,一个为键值数组)来创建一个新数组,返回合并后的数组。如果作为keys的数组和作为values的数组的元素个数不一样,将会抛出一个警告错误(E_WARNING)。
$a = array('green', 'red', 'yellow');
$b = array('watermelon', 'apple', 'banana');
$c = array_combine($a, $b);
dump($c);
array_merge() 与 array_merge_recursive()
都是用于把一个或多个数组合并为一个数组。当输入一个数组时,他们返回结果相同,将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。不同之处在于,输入两个或更多个数组元素时,如果有相同的键名,使用array_merge() 最后的元素会覆盖其他元素;array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组。
$a1=array("a"=>"red","b"=>"green");
$a2=array("c"=>"blue","b"=>"yellow");
dump(array_merge($a1,$a2));
dump(array_merge_recursive($a1,$a2));
array_unique()
array_unique() 删除数组中重复的值,并返回结果数组。当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除,返回的数组中键名不变。
$a1 = array("apple", "banana", "pear", "apple", "wail", "watermalon");
dump(array_unique($a1));
$a2 = array("a"=>"red","b"=>"green","c"=>"red");
dump(array_unique($a2));
array_key_exists()
array_key_exists($key, $array) 检查指定的键名是否存在于数组中。如果键名存在则返回 true,如果键名不存在则返回 false。
$c = ['no'=>'001' , 'name'=>'amber', 'class'=>'10'];
dump(array_key_exists('name', $c));
array_diff()
array_diff(array1,array2,array3…)比较数组(只比较键值),返回一个差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的键值。
$a1 = array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2 = array("a"=>"red","b"=>"black","h"=>"yellow");
$a3 = array("e"=>"red","f"=>"black","g"=>"purple");
$result1 = array_diff($a1,$a2);
$result2 = array_diff($a1,$a2,$a3);
dump($result1);
dump($result2);
array_diff_key()
array_diff_key(array1,array2,array3…)比较数组(只比较键名),并返回一个差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的键名。
$a1 = array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2 = array("a"=>"red","b"=>"black","h"=>"yellow");
$result = array_diff_key($a1,$a2);
dump($result);
array_diff_assoc()
array_diff_assoc(array1,array2,array3…)比较数组(比较键名和键值),并返回一个差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的键名和键值。
$a1 = array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2 = array("e"=>"red","f"=>"black","g"=>"purple");
$a3 = array("a"=>"red","f"=>"black","d"=>"yellow");
$result = array_diff_assoc($a1,$a2,$a3);
dump($result);