您当前的位置:首页 > 文章教程 > 计算机与互联网 > 网络编程

5.12对数组的集合处理

5.12对数组的集合处理

5.12 对数组的集合处理

5.12.1 计算交集

函数array_intersect()可以用来计算数组的交集,其语法如下。


array array_intersect(array $arr1, array $arr2 [, $arr ...])

函数array_intersect()返回一个数组,该数组包含了在参数数组$arr1中出现,同时也出现在所有其他参数数组中的值,注意键名保留不变。代码5-22演示了该函数的用法。

代码5-22 计算数组之间的交集5-22.php


     01 <?php
     02 $array1 = array(
     03 "a"=>"green",
     04 "red",
     05 "blue"
     06 );                                              //
定义数组$array1
     07 
     08 $array2 = array(
     09 "b"=>"green",
     10 "yellow",
     11 "red"
     12 );                                              //
定义数组$array2
     13 
     14 $result = array_intersect($array1, $array2);    //
获取俩数组的交集
     15 echo "<pre>";
     16 print_r($result);
     17 ?>

【代码解析】这段代码的执行结果如图5-22所示。前面提到过,函数array_intersect()返回的是一个数组,所以代码第14行的$result是一个比较结果,也是一个数组。代码第16行输出这个数组。

PHP还提供了一个函数,可以带索引来计算数组之间的交集。这意味着数组之间不仅元素要一样,而且索引也一样时,才满足交集条件。这个函数是array_intersect_assoc(),其语法如下。


array array_intersect_assoc(array $arr1, array $arr2 [, $arr ...])

函数array_intersect_assoc()返回一个数组,该数组中包含了参数数组$arr1、$arr2…中元素相同且索引值也相同的所有元素。代码5-23演示了该函数的用法。

代码5-23 带索引计算数组之间的交集5-23.php


     01 <?php
     02 $arr1 = array(
     03 "a"=>"green",
     04 "b"=>"brown",
     05 "c"=>"blue",
     06 "red",
     07 "p"=>"pink"
     08 );                                                      //
定义数组$arr1
     09 
     10 $arr2 = array(
     11 "a"=>"green",
     12 "yellow",
     13 "red",
     14 "p"=>"pink",
     15 );                                                      //
定义数组$arr2
     16 
     17 $result_array = array_intersect_assoc($arr1, $arr2);    //
带索引计算俩数组的交集
     18 
     19 echo "<pre>";
     20 print_r($result_array);
     21 echo "</pre>";
     22 ?>

【代码解析】这段代码的执行结果如图5-23所示。与上一个案例的代码作对比,读者会发现,上一个案例中green元素的索引并不一致,一个是a,一个是b。但本例只有两者索引一致的情况下才能算相同,如元素red没有索引,读者可以看到,结果中它也不算相同,所以没有输出此元素。

图5-22 计算数组之间的交集

图5-23 带索引计算数组之间的交集

5.12.2 计算差集

除了可以计算数组之间的交集之外,PHP还提供函数完成数组之间差集的计算。函数array_diff()用来计算数组之间的差集,其语法如下。


array array_diff(array $arr1, array $arr [, $arr ...] )

函数array_diff()返回一个数组,该数组包括了所有在参数数组$arr1中出现,但是不在任何其他参数数组中出现的值。注意,索引保留不变。和函数array array_intersect_assoc()类似,函数array_diff_assoc()带索引计算数组的差集,其语法如下。


array array_diff_assoc( array $arr, array $arr [, $arr ...])

函数array_diff_assoc()返回一个数组,该数组包括了所有在参数数组$arr1中出现,但是不在任何其他参数数组中出现的值。

注意 array_diff_assoc()和array_diff()不同的是,该函数将数组索引名也用于比较。函数array_diff()和array_diff_assoc()的用法类似于函数array_intersect()和array_intersect_ssoc(),这里就不再重复举例说明其用法。