PHP开关情况超过1值的情况下

PHP开关情况超过1值的情况下

问题描述:

我还有另外一种情况。我有保持值的变量(“每周”,“每月”,“每季度”,“年度”)和I具有保存的值从1到10PHP开关情况超过1值的情况下

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中做到这一点?先谢谢你。对不起我的英语不好。

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

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

+0

'($ var2 == 1 || $ var2 == 2)'可能无法正常工作,具体取决于'$ var2'是什么。如果'$ var2 = 0',第一个案例将被执行。它也比简单的'case'风格更加冗长。你也经常“打破”一点。 – deceze 2010-11-12 09:42:39

+0

@deceze,同意,这就是为什么我先把另一个解决方案,它只是一个“复杂”布尔比较的例子 – Hannes 2010-11-12 09:51:06

+1

**如果**你要使用这种风格,至少通过使条件工作正确正确的:'switch(true){case($ a || $ b):...}' – deceze 2010-11-12 09:52:48

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

第一个匹配大小写后面的所有内容都将执行到中断声明被发现。所以这只是下一个案例,它允许你“组合”案件。

交换机在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

恭喜你与你的第一个答案!但是,这是关闭:) – pltvs 2014-02-03 11:30:10

+0

如果没有这些硬编码的数字呢? – 2014-12-27 20:54:28

+0

我正在寻找这个答案......谢谢@足球。 – user1735921 2016-12-04 21:15:42