好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php中数组的并集、交集和差集函数介绍 - php数组

php中数组的并集、交集和差集函数介绍

在php中如果我想要对两个数组进行如并集、交集和差集操作,我们可直接使用php自带的函数来操作如array_merge(),array_intersect(),array_diff().

计算数组的合并 array_merge与[+]的区别

array_merge() 函数把两个或多个数组合并为一个数组。

如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的),如果数组是数字索引的,则键名会以连续方式重新索引。

注释: 如果仅仅向 array_merge() 函数输入了一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引.代码如下:

$a  =  array (1 =>  'a' ,  'b' ,  'c' );  $b  =  array (1 =>  'aa' , 2,  'c' );  $union  =  array_merge ( $a ,  $b );  $plus  =  $a  +  $b ;  print_r( $union );  print_r( $plus );  //结果依次为:   Array  {  [0]=> a  [1]=> b  [2]=> c  [3]=> aa  [4]=> 2  [5]=> c  }  Array  (  [1] => a  [2] => b  [3] => c  ) 

要合并的两个数组中有相同的字符串键的时候,使用array_merge()会覆盖掉原来的值,而使用[+]合并数组则会和用[+]号合并数组相同数字键一样把最先出现的值作为最终结果返回,如下例:

$a2  =  array ( 'str'  =>  'a' ,  'b' ,  'c' );  $b2  =  array ( 'str'  =>  'aa' , 2,  'c' );  $union2  =  array_merge ( $a2 ,  $b2 );  $plus2  =  $a2  +  $b2 ;  print_r( $union2 );  print_r( $plus2 );  //结果依次为:   Array  (  [str] => aa  [0] => b  [1] => c  [2] => 2  [3] => c  )  Array  (  [str] => a  [0] => b  [1] => c  ) 

注: 如果想用array_merge合并两个数组,返回结果可能还会有相同的元素,这时候可以用array_unique()把相同的元素去掉

计算数组的交集

array_intersect() 函数返回两个或多个数组的交集数组,结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变,注释:仅有值用于比较,代码如下:

$a  =  array ( 'jpg' , 'png' , 'gif' , 'bmp' );  $b  =  array ( 'JPG' , 'txt' , 'docx' , 'bmp' );  $intersection  =  array_intersect ( $a ,  $b ); 

还可以通过函数,获取自己想要的(比如元素不区分大小写),代码如下:

$intersection2  =  array_intersect ( array_map ( 'strtolower' , $a ),  array_map ( 'strtolower' , $b ));  print_r( $intersection );  print_r( $intersection2 );  //结果依次为:   Array  (  [3] => bmp  )  Array (  [0] => jpg  [3] => bmp  ) 

计算数组的差集, 代码如下:

$old  =  array ( 'jpg' , 'png' , 'gif' , 'bmp' );  $new  =  array ( 'JPG' , 'txt' , 'docx' , 'bmp' );  $difference  =  array_diff ( $old ,  $new ); 

注:返回结果的元素包含$old的元素,不包括$new的元素

print_r($difference);

结果为:

Array  (  [0] => jpg  [1] => png  [2] => gif  ) 

也可以用函数先进行处理,再计算差集

array_diff() 函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值,在返回的数组中,键名保持不变。

语法:array_diff(array1,array2,array3...)

代码如下:

$difference  =  array_diff ( array_map ( 'strtolower' , $old ),  array_map ( 'strtolower' , $new )); 

查看更多关于php中数组的并集、交集和差集函数介绍 - php数组的详细内容...

  阅读:32次