PHP переключатель case более 1 значение в случае - PullRequest
40 голосов
/ 12 ноября 2010

У меня другая ситуация.У меня есть переменная, которая содержит значения («Еженедельно», «Ежемесячно», «Ежеквартально», «Ежегодно»), и у меня есть другая переменная, которая содержит значения от 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?Заранее спасибо.Извините за мой английский.

Ответы [ 3 ]

99 голосов
/ 12 ноября 2010

самый простой и, вероятно, лучший способ производительности будет:

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 должен быть установлен и не может быть нулевым или 0

9 голосов
/ 12 ноября 2010
switch ($var2) {
       case 1 :
       case 2 :
          $var3 = 'Weekly';
          break;
       case 3 :
          $var3 = 'Monthly';
          break;
       case 4 :
       case 5 :
          $var3 = 'Quarterly';
          break;
}

Все после первого соответствующего случая будет выполняться до тех пор, пока не будет найден оператор break.Так что это просто переходит к следующему делу, которое позволяет вам «группировать» дела.

0 голосов
/ 03 февраля 2014

Переключатель также очень удобен для тестирования 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;
...