在这种情况下PHP切换案例超过1个值

Ale*_*tau 45 php case switch-statement

我有另一种情况.我有一个包含值的变量('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.
}
Run Code Online (Sandbox Code Playgroud)

它不漂亮,因为我的代码有很多重复.我想要的是:

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

我怎么能在PHP中做到这一点?先感谢您.对不起我的英语不好.

Han*_*nes 105

表现最明智的最简单也可能是最好的方式:

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

也适用于更复杂的情况:

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

在这种情况下,$ var2必须设置,不能为null或0

  • **如果**你要使用这种风格,至少要通过使条件正确工作来正确地做到这一点:`switch (true) { case ($a || $b) : ... }` (2认同)

dec*_*eze 10

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

第一个匹配案例之后的所有内容都将被执行,直到找到break语句.所以它只是落到下一个案例,它允许你"分组"案件.