私は2つの配列を持っています、値はデータベースからロードされます、以下は例です:
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
私がやりたいのは、$arr1
にすべての値が$arr2
に存在するかどうかを確認することです。上記の例はTRUE
である必要があります。
$arr3 = array(1,2,4,5,6,7);
$arr1
と$arr3
を比較すると、FALSE
が返されます。
通常、単一の値を配列にチェックインするだけなので、in_array
を使用します。ただし、この場合、in_array
は使用できません。最小限のループでチェックを行う簡単な方法があるかどうかを確認したいと思います。
明確化のための更新。
最初の配列は、一意の値を含むセットになります。 2番目の配列には重複した値を含めることができます。どちらも処理前に配列が保証されています。
array_diff()
を使用します。
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
$arr3 = array_diff($arr1, $arr2);
if (count($arr3) == 0) {
// all of $arr1 is in $arr2
}
array_intersect または array_diff を使用できます。
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
if ( $arr1 == array_intersect($arr1, $arr2) ) {
// All elements of arr1 are in arr2
}
ただし、交差点の結果を使用する必要がない場合(これはあなたの場合のようです)、array_diffを使用する方が効率的です。
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
$diff = array_diff($arr1, $arr2);
if ( empty($diff) ) {
// All elements of arr1 are in arr2
}
array_diff() 関数を使用して、2つの配列の違いを見つけることができます。これが役立つ場合があります。つまり、最初の配列のすべての値は2番目の配列にある必要がありますが、その逆ではありません。
私の特定のケースでは、IDのペアが前に処理されたかどうかを確認する必要がありました。そのため、単純なarray_diff()
はうまくいきませんでした。
代わりに、アルファベット順にソートされたIDからキーを生成し、in_arrayで使用しました。
<?php
$pairs = array();
// ...
$pair = array($currentId, $id);
sort($pair);
$pair = implode('-', $pair);
if (in_array($pair, $pairs)) {
continue;
}
$pairs[$pair] = $pair;
これはおそらく最適なソリューションではありませんが、ダーティスクリプトを1回実行するために必要なだけです。