PHP常用数组函数

PHP常用数组函数

     PHP中有一些常用的数组函数,最好能记忆下来。能帮助我们事半功倍,让代码更加简洁。

     1、array_diff( )

     1)array_diff(array1,array2,array3...) 其中array3为可选参数。该函数用于比较两个(或更多个)数组的键值,并返回差集。

     2)该函数比较两个(或更多个)数组的键值,并返回一个差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的键值。

 1 <?php
 2 
 3 $a1=["a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"];
 4 $a2=["e"=>"red","f"=>"green","g"=>"blue"];
 5 
 6 // 比较数组,返回差集(只比较键值)
 7 $result=array_diff($a1,$a2);
 8 print_r($result);
 9 
10 // 结果
11 Array
12 (
13     [d] => yellow
14 )

     2、array_diff_assoc( )

     用于比较两个(或更多个)数组的键名和键值 ,并返回差集

 1 <?php
 2 
 3 $a1=["a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"];
 4 $a2=["a"=>"red","f"=>"green","g"=>"blue"];
 5 
 6 // 比较数组,返回差集(比较键名和键值)
 7 $result=array_diff_assoc($a1,$a2);
 8 print_r($result);
 9 
10 // 结果
11 Array
12 (
13     [b] => green
14     [c] => blue
15     [d] => yellow
16 )

    3、array_intersect( )

    比较数组,返回交集(只比较键值)    

 1 <?php
 2 
 3 $a1=["a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"];
 4 $a2=["e"=>"red","f"=>"green","g"=>"blue"];
 5 
 6 // 比较数组,返回交集(只比较键值
 7 $result=array_intersect($a1,$a2);
 8 print_r($result);
 9 
10 // 结果
11 Array
12 (
13     [a] => red
14     [b] => green
15     [c] => blue
16 )

     4、array_intersect_assoc( ) 

     比较数组,返回交集(比较键名和键值)数组  

 1 <?php
 2 
 3 $a1=["a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"];
 4 $a2=["a"=>"red","b"=>"green","g"=>"blue"];
 5 
 6 // 比较数组,返回交集(比较键名和键值)
 7 $result=array_intersect_assoc($a1,$a2);
 8 print_r($result);
 9 
10 // 结果
11 Array
12 (
13     [a] => red
14     [b] => green
15 )

     5、array_filter( )

     用回调函数过滤数组中的元素  ,该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回给结果数组。数组键名保持不变。    

 1 <?php
 2 
 3 error_reporting(E_ALL & ~(E_NOTICE) & ~(E_WARNING));
 4 
 5 function test_odd($var)
 6 {
 7     return ($var & 1);
 8 }
 9 
10 $a1 = array("a", "b", 2, 3, 4);
11 // 回调函数返回 true,则把输入数组中的当前键值返回给结果数组。数组键名保持不变。
12 print_r(array_filter($a1, "test_odd"));
13 
14 // 返回结果
15 Array
16 (
17     [3] => 3
18 )

    注意:此处的&是位运算符:按位与,运算前先转换为8位的二进制,全1为1,否则为0

    这里比较有意思的是,我们按照a的ascii码也就是97,转成二进制1100001,按理说与1做按位与"&"运算后,返回的是true,然而结果并没有。原因是什么呢

    我们看下php官网中对于位运算中变量类型的转换是怎么讲的:

    

     上面的英文很重要,翻译出来的意思是:

     如果&, |,^的两个操作数都是字符串, 那会先把字符串转换成对应的ascii码然后再进行位操作, 如果是其它情况,那就把它们都转换成整型再进行位操作。

     因此,不管是"a"还是"b",同 1 做"&"运算时,都是先转换成整型 0 ,再进行位操作,结果都是 0。

     6、array_key_exists( )

     检查指定的键名是否存在于数组中 

 1 <?php
 2 
 3 $a = array("a" => "Dog", "b" => "Cat");
 4 if (array_key_exists("c", $a)) {
 5     echo "Key exists!";
 6 } else {
 7     echo "Key does not exist!";
 8 }
 9 
10 // 返回结果
11 Key does not exist!

     7、array_keys( )

     返回数组中所有的键名  

 1 <?php
 2 
 3 $a = array("a" => "Dog", "b" => "Cat");
 4 print_r(array_keys($a));
 5 
 6 // 返回结果
 7 Array
 8 (
 9     [0] => a
10     [1] => b
11 )

     8、array_values( )

     返回数组中所有的键值

 1 <?php
 2 
 3 $a = array("a" => "Dog", "b" => "Cat");
 4 print_r(array_values($a));
 5 
 6 // 返回结果
 7 Array
 8 (
 9     [0] => Dog
10     [1] => Cat
11 )

     9、array_column( ) 

     返回输入数组中某个单一列的值 , array_column ( array $input , mixed $column_key , mixed $index_key = null ) : array

     其中,$column_key: 要返回值的列   $index_key: 作为返回数组的索引/键的列

 1 <?php
 2 
 3 $a = [
 4     ['id' => 1, 'first_name' => 'Bill', 'last_name' => 'Gates'],
 5     ['id' => 2, 'first_name' => 'Steve', 'last_name' => 'Jobs'],
 6     ['id' => 3, 'first_name' => 'Mark', 'last_name' => 'Zuckerberg'],
 7 ];
 8 print_r(array_column($a,'first_name'));
 9 
10 // 返回结果
11 Array
12 (
13     [0] => Bill
14     [1] => Steve
15     [2] => Mark
16 )

    10、array_map( )

    将用户自定义函数作用到数组中的每个值上 

 1 <?php
 2 
 3 function myFunction($num)
 4 {
 5     return ($num * $num);
 6 }
 7 
 8 $a = array(1, 2, 3, 4, 5);
 9 print_r(array_map("myFunction", $a));
10 
11 // 返回结果
12 Array
13 (
14     [0] => 1
15     [1] => 4
16     [2] => 9
17     [3] => 16
18     [4] => 25
19 )

    11、array_merge( )

    把一个或多个数组合并为一个数组 

    说明:如果两个或更多个数组元素有相同的键名,则最后的元素会覆盖其他元素。

 1 <?php
 2 
 3 $array1 = array("color" => "red", 2, 4);
 4 $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
 5 $result = array_merge($array1, $array2);
 6 print_r($result);
 7 
 8 // 返回结果
 9 Array
10 (
11     [color] => green
12     [0] => 2
13     [1] => 4
14     [2] => a
15     [3] => b
16     [shape] => trapezoid
17     [4] => 4
18 )

    12、array_multisort(array1,array1_sort_order )

    1)对多个数组或多维数组进行排序

    2)SORT_ASC 按照上升顺序排序, SORT_DESC 按照下降顺序排序。默认是 SORT_ASC 

 1 <?php
 2 
 3 $arr1 = array(10, 100, 100, 0);
 4 array_multisort($arr1);
 5 print_r($arr1);
 6 
 7 // 返回结果
 8 Array
 9 (
10     [0] => 0
11     [1] => 10
12     [2] => 100
13     [3] => 100
14 )

   多维数组排序 如下:

 1 <?php
 2 
 3 $data[] = array('volume' => 67, 'edition' => 2);
 4 $data[] = array('volume' => 86, 'edition' => 1);
 5 $data[] = array('volume' => 85, 'edition' => 6);
 6 $data[] = array('volume' => 98, 'edition' => 2);
 7 $data[] = array('volume' => 86, 'edition' => 6);
 8 $data[] = array('volume' => 67, 'edition' => 7);
 9 
10 $volume = array_column($data, 'volume');
11 $edition = array_column($data, 'edition');
12 // 把 $data 作为最后一个参数,以通用键排序
13 array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
14 print_r($data);
15 // 返回结果
16 Array
17 (
18     [0] => Array
19         (
20           [volume] => 98
21           [edition] => 2
22         )
23 
24     [1] => Array
25         (
26           [volume] => 86
27           [edition] => 1
28         )
29 
30     [2] => Array
31         (
32           [volume] => 86
33           [edition] => 6
34         )
35 
36     [3] => Array
37         (
38           [volume] => 85
39           [edition] => 6
40         )
41 
42     [4] => Array
43         (
44           [volume] => 67
45           [edition] => 2
46         )
47 
48     [5] => Array
49         (
50           [volume] => 67
51           [edition] => 7
52         )
53 
54 )

    13、array_pop( )

    删除数组的最后一个元素(出栈)

    说明:返回被删除的那个元素,若数组为空或者非数组,将返回NULL

 1 <?php
 2 
 3 $a = array("red", "green", "blue");
 4 // 返回数组的最后一个值
 5 print_r(array_pop($a));
 6 echo PHP_EOL;
 7 print_r($a);
 8 // 返回结果
 9 blue
10 array
11 (
12     [0] => red
13     [1] => green
14 )

    14、array_push( )

    将一个或多个元素插入数组的末尾(入栈)

    说明:返回新数组的元素个数 string

 1 <?php
 2 
 3 $a = array("red", "green");
 4 $res = array_push($a, "blue", "yellow");
 5 print_r($res);
 6 echo PHP_EOL;
 7 print_r($a);
 8 // 返回结果
 9 4
10 Array
11 (
12     [0] => red
13     [1] => green
14     [2] => blue
15     [3] => yellow
16 )

    15、array_replace( )

    使用后面的数组中元素替换第一个数组中的元素

    说明:返回被替换的数组,如果发生错误则返回 NULL

 1 <?php
 2 
 3 $a1=array("red","green");
 4 $a2=array("blue","yellow");
 5 print_r(array_replace($a1,$a2));
 6 // 返回结果
 7 Array
 8 (
 9     [0] => blue
10     [1] => yellow
11 )

    16、array_shift( )

    删除数组中首个元素                                           

    说明: 返回被删除元素的值  string

 1 <?php
 2 
 3 $a=array("a"=>"red","b"=>"green","c"=>"blue");
 4 echo array_shift($a);
 5 echo PHP_EOL;
 6 print_r ($a);
 7 // 返回结果
 8 red
 9 Array
10 (
11     [b] => green
12     [c] => blue
13

    17、array_slice( ) 

    1)返回数组中被选定的部分                                     

    2)返回数组中的选定部分 array_slice(array,start,length,preserve)

 1 <?php
 2 
 3 $a=array("red","green","blue","yellow","brown");
 4 print_r(array_slice($a,2));
 5 // 返回结果: 从数组的第三个元素(索引为 2)开始取出,并返回直到数组末端的所有元素
 6 Array
 7 (
 8     [0] => blue
 9     [1] => yellow
10     [2] => brown
11 )

    18、array_splice( )

    从数组中移除选定的元素,并用新元素取代它       

    说明:array_splice(array,start,length,array)   返回被提取元素组成的数组

    注意:不保留被替换数组中的键名

 1 <?php
 2 
 3 $a1 = array("a" => "red", "b" => "green", "c" => "blue", "d" => "yellow");
 4 $a2 = array("a" => "purple", "b" => "orange");
 5 $res = array_splice($a1, 0, 2, $a2);
 6 print_r($res);
 7 echo PHP_EOL;
 8 print_r($a1);
 9 // 返回结果
10 Array
11 (
12     [a] => red
13     [b] => green
14 )
15 
16 Array
17 (
18     [0] => purple
19     [1] => orange
20     [c] => blue
21     [d] => yellow
22 )

    提示:如果函数没有移除任何元素(length=0),则将从 start 参数的位置插入被替换数组

 1 <?php
 2 
 3 $a1 = array("0" => "red", "1" => "green");
 4 $a2 = array("0" => "purple", "1" => "orange");
 5 $res = array_splice($a1, 1, 0, $a2);
 6 print_r($res);
 7 echo PHP_EOL;
 8 print_r($a1);
 9 // 返回结果
10 Array
11 (
12 )
13 
14 Array
15 (
16     [0] => red
17     [1] => purple
18     [2] => orange
19     [3] => green
20 )

    19、array_unshift( )         

    向数组开头插入一个或多个元素      

    说明:返回数组中元素的个数         

 1 <?php
 2 
 3 $a = array("a" => "red", "b" => "green");
 4 $res = array_unshift($a, "blue");
 5 print_r($res);
 6 echo PHP_EOL;
 7 print_r($a);
 8 // 返回结果
 9 3
10 Array
11 (
12     [0] => blue
13     [a] => red
14     [b] => green
15 )

     20、array_chunk(array,size,preserve_keys )   

     把一个数组分割为新的数组块

     其中,size: 一个整数,规定每个新数组块包含多少个元素   preserve_key:可选,true - 保留原始数组中的键名。false - 默认。每个新数组块使用从零开始的索引。

     例一:

 1 <?php
 2 
 3 $cars = array("Volvo", "BMW", "Toyota", "Honda", "Mercedes", "Opel");
 4 print_r(array_chunk($cars, 2));
 5 // 返回结果
 6 Array
 7 (
 8     [0] => Array
 9     (
10         [0] => Volvo
11         [1] => BMW
12         )
13 
14     [1] => Array
15     (
16         [0] => Toyota
17         [1] => Honda
18     )
19 
20     [2] => Array
21     (
22         [0] => Mercedes
23         [1] => Opel
24     )
25 
26 )

    例二:

 1 <?php
 2 
 3 $cars = array("Volvo", "BMW", "Toyota", "Honda", "Mercedes", "Opel");
 4 print_r(array_chunk($cars, 2,true));
 5 
 6 
 7 // 运行结果
 8   Array
 9 (
10    [0] => Array
11        (
12            [0] => Volvo
13            [1] => BMW
14        )
15    [1] => Array
16        (
17            [2] => Toyota
18            [3] => Honda
19        )
20    [2] => Array
21        (
22            [4] => Mercedes
23            [5] => Opel
24        )
25 )

 

    21、array_walk( array,myfunction,parameter...) 

    1)对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数

    2)可选。规定用户自定义函数的参数,您可以为函数设置一个或多个参数。比如:array_walk($a,"myfunction","has the value")

    说明:如果成功则返回 TRUE,否则返回 FALSE

 1 <?php
 2 
 3 function myfunction($value, $key)
 4 {
 5     echo "The key $key has the value $value" . PHP_EOL;
 6 }
 7 
 8 $a = array("a" => "red", "b" => "green", "c" => "blue");
 9 array_walk($a, "myfunction");
10 // 返回结果
11 The key a has the value red
12 The key b has the value green
13 The key c has the value blue

    改变数组元素的值(请注意 &$value):

 1 <?php
 2 
 3 function myfunction(&$value, $key)
 4 {
 5     $value = "yellow";
 6 }
 7 
 8 $a = array("a" => "red", "b" => "green", "c" => "blue");
 9 $res = array_walk($a, "myfunction");
10 print_r($res);
11 echo PHP_EOL;
12 print_r($a);
13 // 返回结果
14 1
15 Array
16 (
17     [a] => yellow
18     [b] => yellow
19     [c] => yellow
20 )

    22、array_combine( )

    说明:通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组元素为键值

 1 <?php
 2 
 3 $fname = array("Peter", "Ben", "Joe");
 4 $age = array("35", "37", "43");
 5 
 6 $c = array_combine($fname, $age);
 7 print_r($c);
 8 // 返回结果
 9 Array
10 (
11     [Peter] => 35
12     [Ben]   => 37
13     [Joe]   => 43
14 )

     23、array_flip

     反转数组中的键名和对应关联的键值

 1 <?php
 2 
 3 $a1 = array("a" => "red", "b" => "green", "c" => "blue", "d" => "yellow");
 4 $result = array_flip($a1);
 5 print_r($result);
 6 
 7 // 返回结果
 8 Array
 9 (
10     [red] => a
11     [green] => b
12     [blue] => c
13     [yellow] => d
14 )

     PHP数组去重

     一般情况下,我们会考虑使用array_unique( )来实现,大多数情况情况下都是没问题的。但是,在一个大的数组里使用array_unique( )函数,它的运行效率就比较慢。

     我们可以用array_flip()来替代使用array_unique()来创建唯一的数组。array_flip()会交换数组里面每一个元素的键和值,因为键值必须唯一,因此,得到的结果跟array_unique()一样。

 1 <?php
 2 
 3 $array = array('green', 'blue', 'orange', 'blue');
 4 $array = array_flip($array);
 5 print_r($array);
 6 // 返回结果
 7 Array
 8 (
 9     [green] => 0
10     [blue] => 3
11     [orange] => 2
12 )

    因为我们已经移除了一些元素,因此数组看起来不是正常的序列。还需要处理一下,才能得到我们想要的结果。

    解决办法:

    方式一:使用array_merge()修复数组的keys

 1 <?php
 2 
 3 $array = array('green', 'blue', 'orange', 'blue');
 4 $array = array_flip($array);
 5 
 6 $array = array_flip($array);
 7 
 8 $array = array_merge($array);
 9 
10 print_r($array);
11 // 返回结果
12 Array
13 (
14     [0] => green
15     [1] => blue
16     [2] => orange
17 )

    方式二:使用array_keys( )

 1 <?php
 2 
 3 $array = array('green', 'blue', 'orange', 'blue');
 4 $array = array_flip($array);
 5 $array = array_keys($array);
 6 print_r($array);
 7 // 返回结果
 8 array
 9 (
10     [0] => green
11     [1] => blue
12     [2] => orange
13 )

    比较推荐第二种方式,显然它要更简洁一些。

    24、array_search(value,array,strict)

    在数组中搜索某个键值,并返回对应的键名。

    如果第三个参数 strict ,默认为false,如果被指定为 true,则只有在数据类型和值都一致时才返回相应元素的键名

    说明:自 PHP 4.2.0 起,如果搜索失败,该函数返回 FALSE

    例一:

1 <?php
2 $a=array("a"=>"red","b"=>"green","c"=>"blue");
3 echo array_search("red",$a);
4 
5 // 输出结果
6 // a

     例二:

1 <?php
2 $a=array("a"=>"5","b"=>5,"c"=>"5");
3 echo array_search(5,$a,true);
4 
5 // 输出结果
6 // b

 

     25、array_count_values()

     函数用于统计数组中所有值出现的次数

     例一:

 1 <?php
 2  $array = array('green', 'blue', 'orange', 'blue', 'green', 'blue');
 3  print_r($array);
 4  // 返回结果
 5  array
 6  (
 7     [green] => 2
 8     [blue] => 3
 9     [orange] => 1
10 )
11 
12 
13 // 相关应用代码:过滤出现次数大于2的元素
14 $idsMap = array_count_values($idsArr);
15 $newIdsData = array_filter(
16      $idsArr,
17      function ($item) use ($idsMap) {
18          return $idsMap[$item] == 1;
19      }
20 );

 

 

参考链接:https://www.php.net/manual/zh/language.operators.bitwise.php

posted @ 2020-04-04 23:17  欢乐豆123  阅读(358)  评论(0编辑  收藏  举报