配列2に存在しない配列1のすべてのメンバーを取得するための組み込み関数はありますか?
私はそれをプログラムで行う方法を知っていますが、同じことを行う組み込み関数があるかどうかだけ疑問に思っています。したがって、コード例はありません。
5 に答える
それはの仕事のように聞こえarray_diff
ます。
他のどの配列にも存在しないarray1からのすべてのエントリを含む配列を返します。
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) );
注:このメソッドは、数値キーを持つ配列でのみ機能します。
$diff = array_diff($array1, $array2);
この質問を調べていたときに明確にするために、@Jonと@DallasCaleyの答えは、アレイのドメインに応じてどちらも正しいです。
比較しているものに対する配列が結果の完全なドメインである場合、@Jonの回答に従って単純なarray_diffで十分です。
比較しているものに対する配列が結果の完全なドメインではない場合は、@DallasCaleyの回答に従ってdoublearray_diffを使用する必要があります。
このdocstore.mik.ua/orelly/webprog/pcook/ch04_24.htmは非常に便利だと思いました。
標準のdiffの配列の順序を逆にすることで、逆のdiffが必要になる場合があります。