2012-04-13 38 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