web-dev-qa-db-ja.com

array_intersectの反対?

配列2に存在しない配列1のすべてのメンバーを取得する組み込み関数はありますか?
。したがって、コード例はありません。

43

それは array_diff

他の配列に存在しないarray1のすべてのエントリを含む配列を返します。

64
Jon

array_diffは間違いなく明白な選択ですが、技術的には配列の交差の反対ではありません。次の例をご覧ください。

$arr1 = array('rabbit','cat','dog');

$arr2 = array('cat','dog','bird');

print_r( array_diff($arr1, $arr2) );

必要なのは「rabbit」と「bird」を含む結果ですが、最初の配列ではなく2番目の配列ではなく(逆の場合はない)配列を検索するため、取得できるのはウサギのみです。本当に望む結果を得るには、次のようなことをしなければなりません:

$arr1 = array('rabbit','cat','dog');

$arr2 = array('cat','dog','bird');

$diff1 = array_diff($arr1, $arr2);
$diff2 = array_diff($arr2, $arr1);
print_r( array_merge($diff1, $diff2) );

注:このメソッドは、数値キーを持つ配列でのみ機能します。

36
Dallas Caley
$diff = array_diff($array1, $array2);

array_diff()

4
KingCrunch

私はこれを見つけました docstore.mik.ua/orelly/webprog/pcook/ch04_24.htm 非常に便利です。

標準diffの配列の順序を逆にすることで、逆diffが必要になる場合があります。

0
Jesse

この質問を検討していたときに明確にするために、@ Jonと@Dallas Caleyの答えは両方とも、配列のドメインに応じて正しいです。

比較対象の配列が結果の完全なドメインである場合、@ Jonの回答に従って、単純なarray_diffで十分です。

比較対象の配列が結果の完全な領域ではない場合は、@ Dallas Caleyの回答に従ってdouble array_diffを使用する必要があります。

0
Khel_MVA