web-dev-qa-db-ja.com

針が配列の場合、どのようにin_arrayを使用できますか?

私は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番目の配列には重複した値を含めることができます。どちらも処理前に配列が保証されています。

45
Donny Kurnia

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
}
79
cletus

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
}
28
Justin Johnson

array_diff() 関数を使用して、2つの配列の違いを見つけることができます。これが役立つ場合があります。つまり、最初の配列のすべての値は2番目の配列にある必要がありますが、その逆ではありません。

5
Sam152

私の特定のケースでは、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回実行するために必要なだけです。

0
Ivan Karpan