4

たとえば、次の2つの配列があります。

array1={1,2,3,4,5,6,7,8,9};
array2={4,6,9}

array2に完全に存在すると判断できる関数はありますarray1か?

関数をループで使用できることはわかってin_array()いますが、何百もの要素を持つ大きな配列がある場合は、関数を探しています。

4

4 に答える 4

11

試す:

$fullyExists = (count($array2) == count(array_intersect($array2, $array1));

このarray_intersect.php関数は、他のすべての引数 (この場合は最初の配列のみ) に存在する 2 番目の配列の要素のみを返します。したがって、交点の長さが 2 番目の配列の長さと等しい場合、2 番目の配列は最初の配列に完全に含まれます。

于 2012-05-18T10:29:33.407 に答える
1

これに使用できますarray_intersectが、少し注意する必要があります。

一致する配列に重複がない場合は、使用できます

// The order of the arrays matters!
$isSubset = count(array_intersect($array2, $array1)) == count($array2);

ただし、これは機能しません$array2 = array(4, 4)。重複が問題になる場合は、以下も使用する必要がありますarray_unique

$unique = array_unique($array2);
// The order of the arrays matters!
$isSubset = count(array_intersect($unique, $array1)) == count($unique);

配列の順序が重要な理由は、最初のパラメーターとして指定された配列にarray_intersect重複があってはならないからです。パラメータが切り替えられると、この要件は から$array2に移動し$array1ます。これは、関数の動作を変更できるため重要です。

于 2012-05-18T10:31:46.560 に答える
0

複雑な配列は試しませんでしたが、作業を比較しました

var_dump(array(1,2,3,4,5,6,7,8,9) === array(4,6,9));
var_dump(array(1,2,3,4,5,6,7,8,9) === array(1,2,3,4,5,6,7,8,9));
于 2012-05-18T10:42:48.120 に答える
0

迅速かつ簡単なソリューション:

 array_diff(array(1,2,3,4,5,6,7,8,9),array(4,6,9));

戻り値が空の配列の場合、それは配列内にあります。それ以外の場合、彼はそうでないアイテムを出力します

于 2012-05-18T10:35:23.490 に答える