in_array多个值

时间:2011-09-24 23:49:03

标签: php arrays

如何检查多个值,例如:

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

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

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

7 个答案:

答案 0 :(得分:181)

将目标与haystack相交,并确保交叉点与目标完全相同:

$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
 }

答案 1 :(得分:145)

作为开发人员,您应该开始学习集合操作(​​差异,联合,交集)。您可以将数组想象为一个“集合”,以及您正在搜索另一个的键。

检查所有针是否存在

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

答案 2 :(得分:11)

if(in_array('foo',$arg) && in_array('bar',$arg)){
    //both of them are in $arg
}

if(in_array('foo',$arg) || in_array('bar',$arg)){
    //at least one of them are in $arg
}

答案 3 :(得分:5)

离开@Rok Kralj回答(最好的IMO)以检查大海捞针中是否存在任何针头,您可以使用(bool)代替!!,这有时会在代码审查期间造成混淆。< / p>

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

https://glot.io/snippets/f7dhw4kmju

答案 4 :(得分:3)

恕我直言Mark Elliot的解决方案是解决这个问题的最佳解决方案。如果您需要在数组元素之间进行更复杂的比较操作,并且您使用的是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);

这取决于关闭;比较功能可以变得更加强大。 祝你好运!

答案 5 :(得分:1)

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。

答案 6 :(得分:0)

根据PSR-12(取代PSR-2;当前为草稿状态):

 SELECT
 ...
 FROM
 (
    SELECT
       A.item_id,
       MAX(A.created) AS max_created
   FROM table1 A
   JOIN table2 B
   GROUP BY A.id
 ) X
 JOIN table2 C ON C.item_id = X.item_id AND C.created = X.created
 JOIN table3 ...

OR

if (
    $expr1
    && $expr2
) {
    // if body
}

https://www.php-fig.org/psr/

PSR-12