检查php中是否有2个变量不在数组中
这是一个让我困惑的问题。 我试图检查2个变量是否不在一个带有OR的数组中,但它返回的结果与预期相反 有两个!在_数组中,与OR一起创建2个负=正 本案:检查php中是否有2个变量不在数组中,php,arrays,Php,Arrays,这是一个让我困惑的问题。 我试图检查2个变量是否不在一个带有OR的数组中,但它返回的结果与预期相反 有两个!在_数组中,与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";
$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”。如果我用AND改变OR,它会在数组中回响。
这没有多大意义,或者我只是一时糊涂有人能提供一些信息吗?试试这个:
if ( !in_array(2, $user->groups) && !in_array(0, $user->groups) ) {
echo "Not in Array";
} else {
echo "In Array";
}
这将确保当(&&)0和2都不在数组中时,它会打印“不在数组中”问题是您使用的是
|
而不是&&
。逻辑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";
}
希望这有帮助 如我在评论中所述,您应该检查第一个值
和第二个值是否不在数组中:!在数组中(2$user->groups)&&!在数组中(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\u reduce
将回调函数$all\u in
应用于$search
数组的每个值,并跟踪一个布尔值(初始化为true
),只要所有值都在数组$arr
中,该布尔值就会保持true
正如我所说,如果您只查找两个值,这种方法并不特别有用,但一个好处是您可以轻松地将值添加到$search
数组中,而无需更改任何其他代码。如果您想确保这两个值都不在数组中,这应该是&&
而不是| |
…如果它们都不在数组中,那么它们中的任何一个也不在数组中,因此第一个条件满足|
。改用&&
。或者,保留或(| |),删除否定(!),并切换两个回声。他们不再在学校教授德摩根定律了吗?你的问题解决了吗?如果您需要进一步澄清,请考虑编辑您的问题,以使您的要求更清晰。否则你应该接受答案。