2012-04-13 33 views
1

有沒有辦法做共同治療,然後具體的沒有使用另一個開關的情況下?PHP - 開關,外殼,和「繼續」 - 多選泛型然後具體

switch ($var) { 
    case 'A' : 
    /* SPECIFIC TREATMENT 1 */ 
    break; 
    case 'B' : 
    /* SPECIFIC TREATMENT 2 */ 
    break; 
    case 'C' : 
    case 'D' : 
    case 'E' : 
    /* GENERIC, COMMON TREATMENT */ 
    // go on, check again $var ! :(
    case 'C' : 
    /* SPECIFIC TREATMENT 3 */ 
    break; 
    case 'D' : 
    /* SPECIFIC TREATMENT 4 */ 
    break; 
    case 'E' : 
    /* SPECIFIC TREATMENT 5 */ 
    break; 
    case 'F' : 
    /* SPECIFIC TREATMENT 6 */ 
    break; 
    default : 
    /* DEFAULT TREATMENT */ 
    break; 
} 

爲了避免重複的代碼,這將是真正有效...使用另一臺交換機()中的第一個是我想避免的。謝謝 !

回答

2
$cases = array('A','B','C','D'); 
if (in_array($var, $cases)) { 
    /* GENERIC, COMMON TREATMENT */ 

    switch ($var) { 
     case 'A' : 
      /* SPECIFIC TREATMENT 1 */ 
     break; 
     case 'B' : 
      /* SPECIFIC TREATMENT 2 */ 
     break; 
     case 'C' : 
      /* SPECIFIC TREATMENT 3 */ 
     break; 
     case 'D' : 
      /* SPECIFIC TREATMENT 4 */ 
     break; 

    } 
} else { 
    /* DEFAULT TREATMENT */ 

} 

根據您的後續編輯,我會保持同樣的方法

$cases = array('A','B','C','D','E','F','G'); 
if (in_array($var, $cases)) { 
    $common = array('C','D','E'); 
    if (in_array($var, $common)) { 
     /* GENERIC, COMMON TREATMENT */ 
    } 
    switch ($var) { 
     case 'A' : 
      /* SPECIFIC TREATMENT 1 */ 
     break; 
     case 'B' : 
      /* SPECIFIC TREATMENT 2 */ 
     break; 
     case 'C' : 
      /* SPECIFIC TREATMENT 3 */ 
     break; 
     case 'D' : 
      /* SPECIFIC TREATMENT 4 */ 
     break; 
     case 'E' : 
      /* SPECIFIC TREATMENT 2 */ 
     break; 
     case 'F' : 
      /* SPECIFIC TREATMENT 3 */ 
     break; 
     case 'G' : 
      /* SPECIFIC TREATMENT 4 */ 
     break; 

    } 
} else { 
    /* DEFAULT TREATMENT */ 

} 
+0

一點也不差!但我會選擇@kolink的答案,因爲在我的情況下,有些案例沒有通用的待遇。我正在編輯一次。 ;) – 2012-04-13 15:19:07

+0

@Ash_我添加了一個編輯來解決你的修改後的情況 – Crisp 2012-04-13 15:32:34

+0

太棒了!謝謝很多人! – 2012-04-13 15:33:53

4

呃......

$txt = "You pick the letter ".$var; 

偶然地?

+0

Nononono這只是一個例子,我不能這樣做^^ – 2012-04-13 14:41:22

+0

@Ash_:你是什麼意思「不能這樣做」? – 2012-04-13 14:42:06

+0

當然,如果你能夠比較它爲'switch'的目的,你可以做到嗎?除非你想顯示比較操作數以外的內容? – BenM 2012-04-13 14:42:55

3
$txt = "you picked the letter "; 
    $var = 'C'; 
    switch ($var) { 
     case 'A' : 
     $txt .= "A"; 
     break; 
     case 'B' : 
     $txt .= "B"; 
     break; 
     case 'C' : 
     $txt .= "C"; 
     break; 
     case 'D' : 
     $txt .= "D"; 
     break; 
     default : 
     $txt = 'you didnt pick A or B or C or D'; 
     break; 
    } 
    echo $txt; 
0
$var='c'; 
$arr=array('A'=>'xxx',B=>'xxxxxx'.......); 
echo 'some you want '.$arr($var); 
2
$common = function() use (&$var) { 
    // do stuff that is common to several cases 
}; 
switch($var) { 
    case 'A': 
     $common(); 
     // now specific stuff 
     break; 
    case 'B': 
     $common(); 
     // specific 
     break; 
} 

等。你仍然得到$common()的重複,但至少比你想要做的要少。

+0

可愛。我認爲這大部分是我想要的。 (再次編輯我的文章) – 2012-04-13 15:19:51