2010-11-12 107 views
28

我還有另外一種情況。我有保持值的變量(「每週」,「每月」,「每季度」,「年度」)和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中做到這一點?先謝謝你。對不起我的英語不好。

回答

79

最簡單,可能是最好的方式表現明智的是:

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

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

第一個匹配大小寫後面的所有內容都將執行到中斷聲明被發現。所以這只是下一個案例,它允許你「組合」案件。

-2

交換機在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