Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查php中是否有2个变量不在数组中_Php_Arrays - Fatal编程技术网

检查php中是否有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";

这是一个让我困惑的问题。 我试图检查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";

    }
由于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
数组中,而无需更改任何其他代码。

如果您想确保这两个值都不在数组中,这应该是
&&
而不是
| |
…如果它们都不在数组中,那么它们中的任何一个也不在数组中,因此第一个条件满足
|
。改用
&&
。或者,保留或(| |),删除否定(!),并切换两个回声。他们不再在学校教授德摩根定律了吗?你的问题解决了吗?如果您需要进一步澄清,请考虑编辑您的问题,以使您的要求更清晰。否则你应该接受答案。