这让我很困惑。我试图检查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
数组添加值,而无需更改任何其他代码。