回答:
ターゲットを干し草の山と交差させ、交差がターゲットと正確に等しいことを確認します。
$haystack = array(...);
$target = array('foo', 'bar');
if(count(array_intersect($haystack, $target)) == count($target)){
// all of $target is in $haystack
}
結果の交差のサイズがターゲット値の配列と同じサイズであることを確認するだけでよいことに注意してください。つまり$haystack
、のスーパーセットです$target
。
の少なくとも1つの値$target
がにもあることを確認するには$haystack
、次のチェックを実行します。
if(count(array_intersect($haystack, $target)) > 0){
// at least one of $target is in $haystack
}
開発者は、おそらく集合演算(差分、和集合、交差)を学ぶ必要があります。配列を1つの「セット」として、そしてキーを検索してもう1つを想像できます。
function in_array_all($needles, $haystack) {
return empty(array_diff($needles, $haystack));
}
echo in_array_all( [3,2,5], [5,8,3,1,2] ); // true, all 3, 2, 5 present
echo in_array_all( [3,2,5,9], [5,8,3,1,2] ); // false, since 9 is not present
function in_array_any($needles, $haystack) {
return !empty(array_intersect($needles, $haystack));
}
echo in_array_any( [3,9], [5,8,3,1,2] ); // true, since 3 is present
echo in_array_any( [4,9], [5,8,3,1,2] ); // false, neither 4 nor 9 is present
@Rok Kraljの回答(最高のIMO)から離れて、干し草の山に針が存在するかどうかを確認します。(bool)
代わりに、!!
コードレビューで混乱する可能性がある針を使用できます。
function in_array_any($needles, $haystack) {
return (bool)array_intersect($needles, $haystack);
}
echo in_array_any( array(3,9), array(5,8,3,1,2) ); // true, since 3 is present
echo in_array_any( array(4,9), array(5,8,3,1,2) ); // false, neither 4 nor 9 is present
IMHOマークエリオットのソリューションは、この問題に最適です。配列要素間でより複雑な比較演算を行う必要があり、PHP 5.3を使用している場合は、次のようなことも考えられるでしょう。
<?php
// First Array To Compare
$a1 = array('foo','bar','c');
// Target Array
$b1 = array('foo','bar');
// Evaluation Function - we pass guard and target array
$b=true;
$test = function($x) use (&$b, $b1) {
if (!in_array($x,$b1)) {
$b=false;
}
};
// Actual Test on array (can be repeated with others, but guard
// needs to be initialized again, due to by reference assignment above)
array_walk($a1, $test);
var_dump($b);
これはクロージャに依存しています。比較機能はより強力になる可能性があります。幸運を!
if(empty(array_intersect([21,22,23,24], $check_with_this)) {
print "Not found even a single element";
} else {
print "Found an element";
}
array_intersect()は、すべての引数に存在するarray1のすべての値を含む配列を返します。キーは保持されることに注意してください。
すべてのパラメータに値が存在するarray1のすべての値を含む配列を返します。
empty()-変数が空かどうかを判別
varが存在し、空でもゼロでもない値がある場合は、FALSEを返します。それ以外の場合はTRUEを返します。