【问题标题】:Possible to chain comparison operators?可以链接比较运算符吗?
【发布时间】:2023-03-30 21:15:01
【问题描述】:

到目前为止,我一直无法在官方 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;
}

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

【问题讨论】:

  • 没试过,但是像 php 一样脏,它应该可以工作
  • 不,但是来吧,你为什么不能只使用$d &lt; $e &amp;&amp; $e &lt; $f?而且,最重要的是,当他们试图将$b == $c结果$a 进行比较时应该怎么做?
  • @raina77ow ($b == $c) == $a 怎么样?链式比较运算符并不奇怪。 Python 和 Perl 6 也都支持它,而且这种表示法在基础数学中很常见。
  • @Kevin 我强烈反对使用括号来增加运算符的含义。这里 ($b == $c) == $a 意味着一件事 - '将 $b == $c 的结果与 $a 进行比较',而 $b == $c == $a 则真正不同。

标签: php comparison-operators


【解决方案1】:

不,PHP 没有这样的东西。

【讨论】:

  • 对不起,但我认为答案是否定的,应该是评论,更好,看起来更专业。
  • 嗯,这就回答了。谢谢!
  • @E.T.它也在上面回答(您的问题下的第二条评论!)
  • @Akam 评论不是答案,因此不能被接受。我选择接受这个答案,而不是将两个给定的答案复制到我自己的答案中,因为这个答案回答了给定的问题,而另一个答案回答了一个未提出的问题。
  • @Akam,好吧,如果问题明确地询问事情是否可能,那么答案应该是什么?绝对不是?
【解决方案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 的大小。

【讨论】:

  • 很遗憾,编写自定义函数不是语言支持的语法,它只是一个普通函数。
  • 你回答了一个没人问的问题。
  • @E.T.它“将比较链接在一起的语法,而不需要对两个不同的比较进行显式与运算”。
猜你喜欢
  • 2011-10-21
  • 2022-07-06
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
相关资源
最近更新 更多