PHP实现的数组交集运算

PHP实现的数组交集运算,使用递归方式进行数组的合并运算,在编码过程中应该注意到array_merge()、+以及array_merge_recursive()在数组合并时的差异。

array_merge():

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

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

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

+:

  两个数组相加,只是追加不存在的键名和对应的值,键名不重新索引。

array_merge_recursive():

  将一个或多个数组的元素的合并起来,一个数组中的值附加在前一个数组的后面。并返回作为结果的数组。

  但是,与array_merge()不同的是,当有重复的键名时,值不会被覆盖,而是将多个相同键名的值递归组成一个数组。

 1 <?php
 2 
 3 /**
 4  * @email modofu@163.com
 5  * @author modofu.chen
 6  * @copyright 2013
 7  * 多数组取交集运算
 8  * 使用方法:
 9  * ArrayIntersection ($array1,[$array2,$array3...]);
10  * 参数可变,且需要都为数组。
11  * 
12  */
13 
14 function ArrayIntersection ()
15 {
16     $ParamNum = func_num_args ();
17     $Params = func_get_args ();
18     for ($i = 0; $i < $ParamNum ; $i ++)
19     {
20         if (!is_array ($Params[$i]))
21         {
22             unset ($Params[$i]);
23         }
24     }
25     unset ($ParamNum);
26     $UnionArray = array ();
27     for ($j = 0; $j < count ($Params) ; $j++)
28     $UnionArray = array_merge_recursive($UnionArray , $Params[$j]);
29     unset ($Params);
30     $NewArray = array ();
31     Recursion($UnionArray , $NewArray);
32     unset ($UnionArray);
33     $UniqueArray = array_Unique($NewArray);
34     $RepeatArray = array_diff_assoc ($NewArray , $UniqueArray);
35     unset($NewArray , $UniqueArray);
36     $RepeatArray = array_unique($RepeatArray);
37     printf ($RepeatArray);
38     
39 }
40 
41 function Recursion (&$_UnionArray , &$_Returnarray)
42 {
43     foreach ($_UnionArray as $key => $value)
44     {
45         if (!is_array ($_UnionArray[$key]))
46         {
47             array_push ($_Returnarray , $_UnionArray[$key]);
48         }
49         else
50         {
51              Recursion($_UnionArray[$key] , $_Returnarray);
52         }
53     }
54 }
55 
56 ?>

 

posted @ 2013-08-01 20:59  瘦瘦男  阅读(1389)  评论(0)    收藏  举报