检查两个变量是否不在php的数组中


Check if 2 vars are not in array in php

这让我很困惑。我试图检查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在数组中,我希望脚本回显"在数组中",但它回显"不在数组中"。如果我在OR之后删除第二个!in_array,它会回显"In Array"。如果我用AND改变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";
}

希望这对你有帮助!

试试这个:

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

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

正如我在评论中所述,您应该检查第一个值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),只要所有值都在数组$arr中,该值就保持为true

正如我所说的,如果您只寻找两个值,这种方法不是特别有用,但是一个好处是您可以轻松地向$search数组添加值,而无需更改任何其他代码。