in_array多个值所有针头都存在任何针存在重要考虑因素

2022-08-30 06:57:30

如何检查多个值,例如:

$arg = array('foo','bar');

if(in_array('foo','bar',$arg))

这是一个例子,所以你理解得更好一点,我知道它不会起作用。


答案 1

将目标与大海捞针相交,并确保交集计数等于目标计数:

$haystack = array(...);

$target = array('foo', 'bar');

if(count(array_intersect($haystack, $target)) == count($target)){
    // all of $target is in $haystack
}

请注意,您只需要验证生成的交集的大小是否与目标值数组的大小相同,即可表示该数组是 的超集。$haystack$target

要验证 中是否至少有一个值也在 中,可以执行以下检查:$target$haystack

 if(count(array_intersect($haystack, $target)) > 0){
     // at least one of $target is in $haystack
 }

答案 2

在数组中搜索多个值对应于集合运算(集合差值和交集),如下所示。

在您的问题中,您没有指定所需的数组搜索类型,因此我为您提供了这两个选项。

所有针头都存在

function in_array_all($needles, $haystack) {
   return empty(array_diff($needles, $haystack));
}

$animals = ["bear", "tiger", "zebra"];
echo in_array_all(["bear", "zebra"], $animals); // true, both are animals
echo in_array_all(["bear", "toaster"], $animals); // false, toaster is not an animal

任何针存在

function in_array_any($needles, $haystack) {
   return !empty(array_intersect($needles, $haystack));
}

$animals = ["bear", "tiger", "zebra"];
echo in_array_any(["toaster", "tiger"], $animals); // true, tiger is an amimal
echo in_array_any(["toaster", "brush"], $animals); // false, no animals here

重要考虑因素

如果您正在搜索的针组很小并且预先已知,则如果您只使用调用的逻辑链接,则代码可能会更清晰,例如:in_array

$animals = ZooAPI.getAllAnimals();
$all = in_array("tiger", $animals) && in_array("toaster", $animals) && ...
$any = in_array("bear", $animals) || in_array("zebra", $animals) || ...