web-dev-qa-db-ja.com

PHPスイッチで比較演算子を使用する

したがって、4つの条件を経験する必要があり、PHPでswitchステートメントを使用するのが最善だと考えました。ただし、整数が、たとえば以下か、それ以上かを確認する必要があります。

_switch ($count) {
    case 20:
        $priority = 'low';
        break;

    case 40:
        $priority = 'medium';
        break;

    case 60:
        $priority = 'high';
        break;

    case 80:
        $priority = 'severe';
        break;
}
_

if()ステートメントを使用すると、次のようになります。

_if ($count <= 20) {
    $priority = 'low';
}

if ($count <= 40) {
    $priority = 'medium';
}
_

_switch-case_で可能ですか?

33
Jessie Stalk

この問題を解決するためのより一般的なケースは次のとおりです。

switch (true) {
    case $count <= 20:
        $priority = 'low';
        break;

    case $count <= 40:
        $priority = 'medium';
        break;

    case $count <= 60:
        $priority = 'high';
        break;

    default:
        $priority = 'severe';
        break;
}
114
Konr Ness

スイッチはそれを行うことはできませんが、この特定のケースでは、次のようなことができます。

switch ((int)(($count - 1) / 20)) {
    case 0:
        $priority = 'low';
        break;
    case 1:
        $priority = 'medium';
        break;
    case 2:
        $priority = 'high';
        break;
    case 3:
        $priority = 'severe';
        break;
}

(int)(($count - 1) / 20) 0から20までのすべての値は0に評価され、21から40は1に評価されるなど、この目的でswitchステートメントを使用できます。

また、値を連結しているため、配列に単純化することもできます。

$priorities = ['low', 'medium', 'high', 'severe'];
$priority = $priorities[(int)(($count - 1) / 20)];
4
Havenard

PHP 7で三項代入演算子を使用する方法があります。演算子は以前に(5.4?)で導入されましたが、他のバージョンでコードをテストしたことはありません。スイッチコード全体を記述しました there ですが、簡潔にするためにここでは特定の句のみを示します。 5以上のすべての数値に対して条件を一致させたいとしましょう:

switch($value){
 case ($value >= 5?$value:!$value)://do something here
 break;
}     

$ valueを変更せずに渡すか、条件に応じて値を無効にします。 $ valueは常にそれ自体と一致するか、その否定に対するテストに失敗します。

3
bytephunk

いいえ。switch()ステートメントは、複数の同等性テストを行うためのものです。それらは基本的に、わずかに読みやすい(しかしより危険な)バージョンでもあります

_if (x == 'a') { ... }
else if (x == 'b') { ... } 
else if (x == 'c') { ... }
_

コード。 switch()を_==_から_<_または他の比較演算子に変更する方法はありません。厳密に同等性テスト用です。

0
Marc B