2011-12-04 8 views
5

引数は、このようなものです:逆()

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

と機能はARR1には存在しないARR2、ARR3、ARR4 ...からすべての要素の配列を返す必要があります。

これには組み込み関数がありますか?それとも、私はforeachやもので自分自身を作る必要がありますか? :)

+2

セット理論では補数と呼ばれるでしょう –

+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); 

EDITは:トロットの答えは私にはないエッジケースの負担をカバーしています。それはおそらくあなたが得られる最良の解決策です。