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

时间:2010-11-12 09:29:22

标签: php switch-statement case

我有另一种情况。我有一个包含值的变量('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中做到这一点?先感谢您。抱歉我的英文。

5 个答案:

答案 0 :(得分:95)

表现明智的最简单且最好的方式是:

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

答案 1 :(得分:8)

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

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

答案 2 :(得分:0)

您可以使用数组来存储匹配组;喜欢:

    <?php
    $names = array('Ian', 'Jack', 'Fred', 'Ismail');
    $name = 'Vladimir';
    switch ($name) {
    case (in_array($name, $names)):
            echo '<p> Welcome ' . $name . '</p>';
            break;
        default:
            echo '<p>' . $name . ' is a stranger to me?</p>';
    }
?>

答案 3 :(得分:0)

如果您正在阅读本文并且年份是 2021 年及以后,并且您还在使用 PHP >8.0,那么您现在可以为此使用新的 ma​​tch 表达式。

这可能是

$var3 = match($var2){
    1,2 => 'Weekly',
    3 => 'Monthly',
    4,5 => 'Quarterly'
};

阅读更多关于匹配表达式here

答案 4 :(得分:-1)

Switch对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;