php中的逻辑运算符方程

时间:2016-01-27 09:55:04

标签: php logical-operators

我的功能有问题,应该根据数组中的数据组合逻辑运算符:

$arr = array(
    0 => array(false, "or"),
    1 => array(false, "or"),
    2 => array(true)
);
等式应该是:

  • false或false或true
  • ($ arr [0] [0] $ arr [0] [1] $ arr [1] [0] $ arr [1] [1] $ arr [2] [0])

结果:是真的

但是函数中发生了错误,它返回false。 我错过了什么?

var_dump( arrayBoolValidation($arr) );

function arrayBoolValidation (array $arr) {
    $num = count($arr);
    $status = $arr[0][0];
    for($i = 1; $i < $num; ++$i) {
        if ($arr[$i-1][1] == "and") {
            $status = filter_var($status, FILTER_VALIDATE_BOOLEAN) and filter_var($arr[$i][0], FILTER_VALIDATE_BOOLEAN);
        } else if ($arr[$i-1][1] == "or") {
            $status = filter_var($status, FILTER_VALIDATE_BOOLEAN) or filter_var($arr[$i][0], FILTER_VALIDATE_BOOLEAN);
        }
    }
    return $status;
}

4 个答案:

答案 0 :(得分:2)

这是运营商优先问题。 and&&不同。看http://php.net/manual/en/language.operators.precedence.php

=的优先级高于and,因此$a = $b and $c;等于$a = $b;

您必须使用额外的括号($a = ($b and $c);)或更好地使用&&。关于or(使用||)。

答案 1 :(得分:0)

假设必须评估所有条件:

注意:我没有定义运算符时添加了大小写。

    [...]
    if (!isset($arr[$i-1][1])) {
        $status = $status || $arr[$i][0];  // default: OR, && else
    } else if ($arr[$i-1][1] == "and") {
        $status = $status && $arr[$i][0];
    } else if ($arr[$i-1][1] == "or") {
        $status = $status || $arr[$i][0];
    }
    [...]

答案 2 :(得分:0)

更改循环内的以下内容:

if ($arr[$i-1][1] == "and") {
    $status = (filter_var($status, FILTER_VALIDATE_BOOLEAN) and filter_var($arr[$i][0], FILTER_VALIDATE_BOOLEAN));
} else if ($arr[$i-1][1] == "or") {
    $status = (filter_var($status, FILTER_VALIDATE_BOOLEAN) or filter_var($arr[$i][0], FILTER_VALIDATE_BOOLEAN));
}

你会看到额外的括号。

如果你没有放置它们,你将$ status设置为filter_var($ status,FILTER_VALIDATE_BOOLEAN),它将始终与第一个条目相同(在这种情况下为false)。

答案 3 :(得分:-1)

我认为循环中存在错误

试,

for($i = 1; $i <=$num; ++$i) {