たとえば、次の2つの配列があります。
array1={1,2,3,4,5,6,7,8,9};
array2={4,6,9}
array2
に完全に存在すると判断できる関数はありますarray1
か?
関数をループで使用できることはわかってin_array()
いますが、何百もの要素を持つ大きな配列がある場合は、関数を探しています。
試す:
$fullyExists = (count($array2) == count(array_intersect($array2, $array1));
このarray_intersect.php
関数は、他のすべての引数 (この場合は最初の配列のみ) に存在する 2 番目の配列の要素のみを返します。したがって、交点の長さが 2 番目の配列の長さと等しい場合、2 番目の配列は最初の配列に完全に含まれます。
これに使用できます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
ます。これは、関数の動作を変更できるため重要です。
複雑な配列は試しませんでしたが、作業を比較しました
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));
迅速かつ簡単なソリューション:
array_diff(array(1,2,3,4,5,6,7,8,9),array(4,6,9));
戻り値が空の配列の場合、それは配列内にあります。それ以外の場合、彼はそうでないアイテムを出力します