2011-12-04 92 views
5

参数是这样的:逆array_intersect的()

function foo(arr1, arr2, arr3, arr4 ...) 

和函数应返回从ARR2,ARR3,arr4所有元素......这不存在ARR1的阵列。

有一个内置在这个功能呢?还是我需要用自己的东西和东西来制作它? :)

+2

在集合论它会被称为补 – 2011-12-04 19:16:21

+0

DUP? http://stackoverflow.com/questions/5582242/opposite-of-array-intersect – Geo

回答

10

有,它正是你所要求的没有内置的功能。 array_diff()接近,但并不完全。所以你必须推出自己的漂亮整洁的功能,否则做这样的事情丑陋:

array_diff(array_unique(
       array_merge(
        array_values($arr2), 
        array_values($arr3), 
        array_values($arr4) 
       )), 
       $arr1 
      ); 

如果你想要那个多次出现在阵列也可以表示多值可删除调用array_unique()次在您的结果。

可以或删除调用array_values()如果你在你的数组键是所有的数字,如果你确信没有出现在阵列中的一个以上的被合并非数字键。

因此,在这些理想的情况下,它可以简化为:

array_diff(array_merge($arr2, $arr3, $arr4), $arr1); 
+0

+1所有没有发生到我的防御性编程 – GordonM

5

你可以用和array_diff做到这一点,但你将不得不扭转局面。

$result = array_diff (array_merge ($arr2, $arr3, $arr4), $arr1); 

编辑:特洛特的答案占地面积,地雷不边缘的情况下的负载。这可能是你要得到的最好的解决方案。