php数组

数组相关的方法

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 "<br/>";
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:第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值