web-dev-qa-db-ja.com

PHPケースに複数の値を切り替える

別の状況があります。値を保持する変数( 'Weekly'、 'Monthly'、 'Quarterly'、 'Annual')があり、1〜10の値を保持する別の変数があります。

switch ($var2) {
       case 1:
          $var3 = 'Weekly';
          break;
       case 2:
          $var3 = 'Weekly';
          break;
       case 3:
          $var3 = 'Monthly';
          break;
       case 4:
          $var3 = 'Quarterly';
          break;
       case 5:
          $var3 = 'Quarterly';
          break;
       // etc.
}

私のコードには多くの重複があるため、美しくありません。私が欲しいもの:

switch ($var2) {
       case 1, 2:
          $var3 = 'Weekly';
          break;
       case 3:
          $var3 = 'Monthly';
          break;
       case 4, 5:
          $var3 = 'Quarterly';
          break;
}

PHPでどうすればよいですか?前もって感謝します。私の英語でごめんなさい。

42
Alex Pliutau

パフォーマンスに関して賢明な最も簡単でおそらく最もよい方法は次のとおりです。

switch ($var2) {
       case 1:
       case 2:
          $var3 = 'Weekly';
          break;
       case 3:
          $var3 = 'Monthly';
          break;
       case 4:
       case 5:
          $var3 = 'Quarterly';
          break;
}

また、より複雑な状況でも可能です:

switch ($var2) {
    case ($var2 == 1 || $var2 == 2):
        $var3 = 'Weekly';
        break;
    case 3:
        $var3 = 'Monthly';
        break;
    case ($var2 == 4 || $var2 == 5):
        $var3 = 'Quarterly';
        break;
}

このシナリオでは、$ var2を設定する必要があり、nullまたは0にすることはできません

101
Hannes
switch ($var2) {
       case 1 :
       case 2 :
          $var3 = 'Weekly';
          break;
       case 3 :
          $var3 = 'Monthly';
          break;
       case 4 :
       case 5 :
          $var3 = 'Quarterly';
          break;
}

Breakステートメントが見つかるまで、最初に一致したケース以降のすべてが実行されます。そのため、次のケースに進むだけで、ケースを「グループ化」できます。

9
deceze

スイッチはABテストにも非常に便利です。ここでは、何かの4つの異なるバージョンをランダムにテストするためのコード:

$abctest = mt_Rand(1, 1000);
switch ($abctest) {
   case ($abctest < 250):
     echo "A code here";
     break;
   case ($abctest < 500):
     echo "B code here";
     break;
   case ($abctest < 750):
     echo "C code here";
     break;
   default:
     echo "D code here";
     break;
0
Soccerwidow