爪哇社区
  • 首页
  • 文章
  • 问答
  • 导航



  1. 首页
  2. 文章列表
  3. PHP常用数组函数

PHP常用数组函数

发布:HelloJq 时间:2025-06-22

   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 );


爪哇社区 © 2024