这让我很困惑。 我试图检查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”。
它没有多大意义,或者我此刻感到困惑。
有人可以提供一些意见吗?
答案 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>