2011-12-04 60 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); 

編輯:特洛特的答案佔地面積,地雷不邊緣的情況下的負載。這可能是你要得到的最好的解決方案。