检查php中是否有2个变量不在数组中

时间:2014-07-07 16:45:55

标签: php arrays

这让我很困惑。 我试图检查2个变量是否不在带有OR的数组中,但它返回的结果与预期相反。

2!in_array与OR一起创建2个底片=正面吗?

案例:

$user->groups = array(2,13,15);

if ( !in_array(2, $user->groups) || !in_array(0, $user->groups) ) {

    echo "Not in Array";

    } else {

    echo "In Array";

    }

由于2在数组中,我希望脚本回显“In Array”,但它回显“Not in Array”。如果在OR之后删除第二个!in_array,它会回显“In Array”。如果我用AND更改OR,它会回显“In Array”。 它没有多大意义,或者我此刻感到困惑。
有人可以提供一些意见吗?

3 个答案:

答案 0 :(得分:3)

问题是您使用的是||而不是&&。逻辑OR(||)的作用是它检查第一个条件,如果它是真的,那么它不会测试if语句中的其他条件。以下是修订后的代码:

$user->groups = array(2,13,15);

if ( !in_array(2, $user->groups) && !in_array(0, $user->groups) ) {

    echo "Not in Array";

    } else {

    echo "In Array";
}

希望这有帮助!

答案 1 :(得分:2)

试试这个:

if ( !in_array(2, $user->groups) && !in_array(0, $user->groups) ) {
  echo "Not in Array";
} else {
  echo "In Array";
}

这将确保当(&&)0和2都不在数组中时,它会打印“Not in array”

答案 2 :(得分:0)

正如我的评论中所述,您应该检查第一个值and第二个值不在数组中:!in_array(2, $user->groups) && !in_array(0, $user->groups)

对于两个条件,我会考虑以下建议矫枉过正,但如果您想搜索更多数量的值,您可能会发现它很有用:

$arr = array(1,2,3);
$search = array(1,2);

$all_in = function($prev, $curr) use ($arr) {
    return $prev && in_array($curr, $arr);
};

if (array_reduce($search, $all_in, true)) {
    echo 'all values in $search are in $arr';
}
else { 
    echo 'some of the values in $search are not in $arr';
}

array_reduce将回调函数$all_in应用于$search数组的每个值,并跟踪保持为{{的布尔值(初始化为true) 1}}只要所有值都在数组true中。

正如我所说,如果你只是寻找两个值,这个方法并不是特别有用,但是一个好处是你可以轻松地将值添加到$arr数组而不改变任何其他代码。 / p>