数组相关的方法
1 array_change_key_case(array,case)将数组的键改成大写或小写
$arr = ['a' => 1,'B' => 2,'c' => 3];
$arr1 = array_change_key_case($arr,CASE_LOWER);//键 全部变成小写 ['a' => 1,'b' => 2,'c' => 3]
$arr2 = array_change_key_case($arr,CASE_UPPER);//键 全部变成大写 ['A' => 1,'B' => 2,'C' => 3]
PS : 如果在运行该函数时两个或多个键相同,则最后的元素会覆盖其他元素
$arr = ['a' => 1,'B' => 2,'b' => 3];
$arr1 = array_change_key_case($arr,CASE_LOWER);//键 全部变成小写 ['a' => 1,'b' => 3]
2 array_chunk(array,size,bool) 函数把数组分割为新的数组块
$arr = ['a' => 1,'b' => 2,'c' => 3];
//把数组分割为带有两个元素的数组,保留原来的key
$arr2 = array_chunk($arr,2,true);
// [['a' => 1,'b' => 2],['c' => 3]];
// 如果第三个参数是false: 键会变成数字
[[1,2],[3]];
3 array_column() 返回输入数组中某个单一列的值。(多维数组)
$arr = [['id' => 1,'name' => 'user1'],['id' => 2,'name' => 'user2']];
$arr1 = array_column($arr,'id','name'); //从记录集中取出 id 列,用相应的 name 列作为键值
// ['user1' => 1,'user2' => 2];
4 通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组元素为键值:
$user = ['user1','user2','user3'];
$age = [21,22,23];
$arr = array_combine($user, $age);//['user1' => 21,'user2' => 22,'user3' => 23];
PS:键名数组和键值数组的元素个数必须相同!如果其中一个数组为空,或者两个数组的元素个数不同,则该函数返回 false。
5 array_count_values() 函数对数组中的所有值进行计数。
$arr = ['a' => 1,'b' => 2,'c' => 2];
$arr1 = array_count_values($arr);//['1' => 1,'2' => 2];1出现1次,2出现2次
6 array_diff() 函数(只比较键值) ,返回两个数组的差集数组。,在返回的数组中,键名保持不变。
$arr = ['a' => 1,'b' => 2,'c' => 3,'d' => 4];
$brr = ['e' => 1,'f' => 2,'g' => 5];
array_diff($arr,$brr);//['c' => 3,'d' => 4]; 返回$arr中有的值,但在$brr里没有的值,键还是原来的键
7 array_diff_assoc() 函数(比较键名和键值 )用于比较两个(或更多个)数组的键名和键值 ,并返回差集。
8 array_diff_key() 函数(比较键名)用于比较两个(或更多个)数组的键名 ,并返回差集。
// 第一个参数是开始填充的索引,第二个参数是填充的数量,第三个参数是填充的值
$arr = array_fill(1,3,"a");//[1 => 'a',2 => 'a',3 => 'a'];
9 array_fill_keys() 函数使用指定的键和值填充数组。
$keys=array("a","b","c");
$arr = array_fill_keys($keys,"red");//['a' => 'red','b' => 'red' ,'c' => 'red'];
10 array_filter() 函数用回调函数过滤数组中的值。
function fiter($value)
{
if ($value > 2) {
return $value;
}
}
$arr = array(2,3,4);
print_r(array_filter($arr,"fiter")); // [3,4]
11 array_flip() 函数用于反转/交换数组中所有的键名以及它们关联的键值。如果同一值出现了多次,则最后一个键名将作为它的值,所有其他的键名都将丢失。
$arr = array("a"=>"red","b"=>"green","c"=>"blue");
$result = array_flip($a1); //['red' => 'a' ,'green' => 'b' ,'blue' => 'c']
PS 如果原数组中的值的数据类型不是字符串或整数,函数将报错。
12 array_intersect() 函数(只比较键值)用于比较两个(或更多个)数组的键值,并返回交集。
$a1=array("a"=>"red","b"=>"green","c"=>"blue");
$a2=array("e"=>"red","f"=>"green");
$result = array_intersect($a1,$a2);//['a' => 'red','b' => 'green'];
13 array_intersect_assoc() 函数(比较键名和键值)用于比较两个(或更多个)数组的键名和键值,并返回交集。
14 array_intersect_key() 函数(只比较键名)用于比较两个(或更多个)数组的键名 ,并返回交集。
15 array_key_exists() 函数检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false。
$a1 = array("a" => 1,"b" => 2);
array_key_exists('a',$a1); // true
16 array_keys() 函数返回包含数组中所有键名的一个新数组。如果提供了第二个参数,则只返回键值为该值的键名。如果第三个参数指定为 true,会使用全等比较 (===) 来严格检查键值的数据类型。
$a=array("a"=>1,"b"=>2,"c"=>'2');
print_r(array_keys($a)); // ['a','b','c'];
print_r(array_keys($a,2)); // ['b','c'];
print_r(array_keys($a,2,false)); // ['b','c']; 默认是false
print_r(array_keys($a,2,true));['b']
17 array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
$a = array("a" => 1,"b" => 2,"c" => '2');
function fn($value){
return $value > 1 ? $value + 1 : $value;
}
print_r(array_map('fn',$a));// ['a' => 1,'b' => 3,'c' => 3];
PS : 和array_filter()不同,array_map()对所有数组值处理,array_filter()只处理满足条件的数组值。
18 array_merge() 函数把一个或多个数组合并为一个数组。如果两个或更多个数组元素有相同的键名,则最后的元素会覆盖其他元素。
$a=array("a" => 1,"b" => 2,"c" => 3);
$b=array("d" => 1,"e" => 2);
print_r(array_merge($a,$b));//['a' => 1,'b' => 2,'c' => 3,'d' => 1,'e' => 2];
19 array_merge_recursive() 函数把一个或多个数组合并为一个数组。
$a = array("a" => 1,"b" => 2,"c" => 3);
$b = array("d" => 1,"e" => 2,'c' => 4);
print_r(array_merge_recursive($a,$b));//['a' => 1,'b' => 2,'c' => [3,4],'d' => 1,'e' => 2];
PS :与 array_merge() 函数的区别在于处理两个或更多个数组元素有相同的键名时。array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组。
20 array_multisort() 函数返回排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序。字符串键名将被保留,但是数字键名将被重新索引,从 0 开始,并以 1 递增。可以在每个数组后设置排序顺序和排序类型参数。如果没有设置,每个数组参数会使用默认值。
// array_multisort(array1,sorting order,sorting type)
// sorting order 可选值
// SORT_ASC - 默认。按升序排列 (A-Z),SORT_DESC - 按降序排列 (Z-A)。
$a1 = array("a","b");
array_multisort($a1);
print_r($a1);//['a','b'];
array_multisort($a1,SORT_DESC);
print_r($a1);//['b','a'];
//sorting type可选值
//SORT_REGULAR - 默认。把每一项按常规顺序排列(Standard ASCII,不改变类型)。
//SORT_NUMERIC - 把每一项作为数字来处理。
//SORT_STRING - 把每一项作为字符串来处理。
//SORT_LOCALE_STRING - 把每一项作为字符串来处理,基于当前区域设置(可通过 setlocale() 进行更改)。
//SORT_NATURAL - 把每一项作为字符串来处理,使用类似 natsort() 的自然排序。
//SORT_FLAG_CASE - 可以结合(按位或)SORT_STRING 或 SORT_NATURAL 对字符串进行排序,不区分大小写。
PS:也可以对多维数组进行排序。
21 array_pad() 函数将指定数量的带有指定值的元素插入到数组中。
$a=array("red","green");
print_r(array_pad($a,3,"blue"));//['red','green','blue']
22 array_pop() 函数删除数组中的最后一个元素。(出栈);
$a = array("red","green");
print_r(array_pop($a));//green
print_r($a);//['red']
23 array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈)
$a=array("red","green");
print_r(array_push($a,'blue'));//3 返回新数组的长度。
print_r($a);//['red','green','blue'];
24 array_shift() 函数删除数组中第一个元素,并返回被删除元素的值。
$a = array("red","green");
print_r(array_shift($a));//'red' 返回被删除的值
print_r($a);//['green']
25 array_unshift() 函数用于向数组插入新元素。新数组的值将被插入到数组的开头。
$a = array("red","green");
print_r(array_unshift($a,'blue'));//3
print_r($a);//['blue','red','green']
26 count() 返回数组长度sizeof()是count()的别名
$a = array("red","green");
print_r(count($a));//2
print_r(sizeof($a));//2
27 sort() 函数对索引数组进行升序排序。rsort()函数对索引数组进行降序排序
// sort(array,sortingtype);
$a = array("red","green");
sort($a);
print_r($a); //['green','red']
//sortingtype 可选值
0 = SORT_REGULAR - 默认。把每一项按常规顺序排列(Standard ASCII,不改变类型)
1 = SORT_NUMERIC - 把每一项作为数字来处理。
2 = SORT_STRING - 把每一项作为字符串来处理。
3 = SORT_LOCALE_STRING - 把每一项作为字符串来处理,基于当前区域设置(可通过 setlocale() 进行更改)。
4 = SORT_NATURAL - 把每一项作为字符串来处理,使用类似 natsort() 的自然排序。
5 = SORT_FLAG_CASE - 可以结合(按位或)SORT_STRING 或 SORT_NATURAL 对字符串进行排序,不区分大小写。
28 asort() 函数对关联数组按照键值进行升序排序。arsort() 函数对关联数组按照键值进行降序排序;
$a = array('a' => "red",'b' => "green");
asort($a);
print_r($a); // ['b' => 'green','a' => 'red']
29 ksort()函数对关联数组按照键名进行升序排序。krsort() 函数用于对数组单元按照键名从高到低进行排序。
30 shuffle() 函数把数组中的元素按随机顺序重新排列。关联数组的键名将被改成索引
$a = array('a' => "red",'b' => "green");
shuffle($a);
print_r($a);//['red','green'];
31 in_array() 函数搜索数组中是否存在指定的值。
$a = array('a' => "red",'b' => "green");
print_r(in_array('red',$a)); //true
32 array_sum() 函数返回数组中所有值的和。
$a = array('a' => "red",'b' => 2);
print_r(array_sum($a));//2
33 array_rand() 函数返回数组中的随机键名,或者如果您规定函数返回不只一个键名,则返回包含随机键名的数组。
$a = array('a' => "red",'b' => 2,'c' => 3,'d' => 1);
print_r(array_rand($a)); //返回一个键名
print_r(array_rand($a,2));//返回两个键名组成的数组
34 array_search() 函数在数组中搜索某个键值,如果找到了该值,匹配元素的键名会被返回。如果没找到,则返回 false。
$a = array('a' => "red",'b' => 2,'c' => 2,'d' => 1);
print_r(array_search(2,$a)); // 'b'
35 array_reverse() 函数将原数组中的元素顺序翻转,创建新的数组并返回
$a = array('a' => 1,'b' => 2,'c' => 3);
print_r(array_reverse($a));//['c' => 3,'b' => 2,'a' => 1]
36 array_unique() 函数移除数组中的重复的值,并返回结果数组。当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。返回的数组中键名不变。注释:被保留的数组将保持第一个数组项的键名类型。
$a = array('a' => 1,'b' => 2,'c' => 2,'d' => 3);
print_r(array_unique($a));//['a' => 1,'b' => 2,'d' => 3];
37 array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名。
$a = array('a' => 1,'b' => 2,'c' => 3);
print_r(array_values($a));//[1,2,3]
38 compact() 函数创建包含变量名和它们的值的数组。extract() 函数从数组中将变量导入到当前的符号表。list() 函数用于在一次操作中给一组变量赋值。
$a = 1;
$b = 2;
$c = 3;
$result = compact("a", "b", "c");
print_r($result);//['a' => 1,'b' => 2,'c' => 3]
$arr = array('d' => 1,'e' => 2,'f' => 3);
extract($arr);
echo $d;//1
$arr = array(1,2,3);
list($x, $y, $z) = $arr;
echo $x;//1
39 array_replace() 函数使用后面数组的值替换第一个数组的值。
如果一个键存在于第一个数组 array1 同时也存在于第二个数组 array2,第一个数组 array1 中的值将被第二个数组 array2 中的值替换。如果一个键仅存在于第一个数组 array1,它将保持不变。
如果一个键存在于第二个数组 array2,但是不存在于第一个数组 array1,则会在第一个数组 array1 中创建这个元素。
$a = array('a' => 1,'b' => 2);
$b = ['a' => 3,'c' => 4];
print_r(array_values($a));//['a' => 3,'b' => 2,'c' => 4];
40 array_slice() 函数在数组中根据条件取出一段值,并返回。
$a = array('a' => 1,'c' => 3);
print_r(array_slice($a,1,1));//['c' => 3]
41 array_splice() 函数从数组中移除选定的元素,并用新元素取代它。该函数也将返回包含被移除元素的数组。(影响原数组)
$a = array(1,2,3);
$b = array(1,2,3);
$c = array(1,2,3);
array_splice($a,1,1,4); // 替换指定位置元素
array_splice($b,1,1); // 删除指定位置元素
array_splice($c,1,0,4); // 添加指定位置元素
print_r($a);//[1,4,3]
print_r($b);//[1,3]
print_r($c);//[1,4,2,3]
42 each() 函数返回当前元素的键名和键值,并将内部指针向前移动。 current() 函数返回数组中的当前元素的值。
$arr = array(1,2,3);
print_r(each($arr));//['1' => 1,'value' => 1,'0' => 0,'key' => 0];
echo current($arr); //pos() 2
echo next($arr); //3
echo prev($arr); //2
echo end($arr); //3
echo key($arr); //2当前位置
echo reset($arr); //1
43 range() 函数创建一个包含指定范围的元素的数组。
$number = range(0,5);
print_r ($number);
二 数组面试题
1 数组创建问题
$a = [
"1"=>"A",
1=>"B",
"C",
2=>"D",
'3' => 'F'
];
print_r($a);//[1 => 'B',2 => 'D',3 => 'F'];
echo "
";
echo count($a);//3
2 array_multisort排序
// 按照age字段排序
$arr = [
array(
'name'=>'a',
'age'=>28
),
array(
'name'=>'b',
'age'=>14
),
array(
'name'=>'c',
'age'=>59
),
array(
'name'=>'d',
'age'=>23
)
];
array_multisort(array_column($arr,'age'),SORT_DESC,$arr);
print_r($arr);
PS:第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推