6

これまでのところ、公式の PHP ドキュメントやこのサイトでこの情報を見つけることができませんでした。つまり、間違った用語で検索しているか、サポートされていない可能性があります。私は何を探していますか?私はそれを説明します...

PHPで次の比較があるとしましょう:

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

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

PHP には、2 つの異なる比較の明示的な 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;
}

これは技術的には機能しますが、言語によって指定された構文上の省略表現ではありません。

4

2 に答える 2

9

いいえ、PHP にはこのようなものはありません。

于 2013-02-25T15:53:09.350 に答える
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

于 2013-02-25T16:02:20.423 に答える