可以链式比较运算符吗?

时间:2013-02-25 15:49:59

标签: php comparison-operators

到目前为止,我一直无法在官方PHP文档或本网站上找到此信息。 所以,这可能意味着我在错误的条款下搜索,或者它不受支持。 我在找什么? 我会形容它......

假设我在PHP中进行了以下比较:

if (($a == $b) && ($b == $c))
    doSomething();
else
    doSomethingElse();

if (($d < $e) && ($e < $f))
    doSomething();
else
    doSomethingElse();

PHP是否有某种语法将比较链接在一起而没有两种不同比较的显式AND? 例如,这样的事情是可能的:

if ($a == $b == $c)
    doSomething();
else
    doSomethingElse();

if ($d < $e < $f)
    doSomething();
else
    doSomethingElse();

请注意,我正在寻找语言的句法速记。 我知道我可以轻松地为这些链式比较中的每一个编写函数,但这是一个笨拙的解决方法,并不是所希望的。 例如:

function chainedGreaterThan($args)
{
    for ($i = 0; $i < count($args) - 1; $i++)
        if ($args[$i] <= $args[$i + 1])
            return false;
    return true;
}

这在技术上可行,但不是语言给出的句法简写。

2 个答案:

答案 0 :(得分:6)

不,PHP没有这样的东西。

答案 1 :(得分:2)

当你有大量的东西需要比较时,你可以做这样糟糕的事情。

<?php
$arr = [1, 2, 3];
$less_than = function($a, $b) {
    return $a < $b;
};
$greater_than = function($a, $b) {
    return $a > $b;
};

function apply_operator($arr, $operator) {
    for ($i = 0; $i < sizeof($arr) - 1; $i++) {
        if (!$operator($arr[$i], $arr[$i + 1])) {
            return false;
        }
    }
    return true;
}

var_dump(apply_operator($arr, $less_than)); // true
var_dump(apply_operator($arr, $greater_than)); // false

但是,对于大于/小于你可以排序和比较原始,并且为了相同,你可以检查array_unique的大小。