切换声明>可以在一个案例中包含多个案例匹配?

时间:2011-04-08 16:58:56

标签: php switch-statement

我想在一个交换机案例中传递多个值。我意识到我不可能这样做。还有另一种方法,没有将每个案例放在网上吗?

switch(get_option('my_template'))
{
case 'test1', 'test2':
return 850;
break;

default:
return 950;
}

5 个答案:

答案 0 :(得分:26)

switch(get_option('my_template')) {
    case 'test1':
    case 'test2':
        return 850;
        break;    
    default:
        return 950;
}

答案 1 :(得分:2)

除非您在案件中使用break;,否则执行将属于下一个案例。您可以通过将每个案例堆叠在一起来利用这一点,例如:

switch(get_option('my_template')) {
  case 'test1':
  case 'test2':
    return 850;
    break; 
  default:
    return 950;
}

因为“test1”情况下没有break;,当执行结束于该情况时(即立即,因为其中没有逻辑),控制将落入'test2'的情况,将以break声明结束。

在这种情况下,这些情况甚至不需要break,因为return语句会自行解决switch

答案 2 :(得分:2)

在开关结构中,我不相信有任何方法可以在一条线上做“或”。这将是最简单的方法:

switch(get_option('my_template')) 
{ 
   case 'test1':
   case 'test2': 
     return 850; break;  

   default:
     return 950; 
} 

但是,特别是如果您只返回一个值而不执行代码,我会建议您执行以下操作:

$switchTable = array('test1' => 850, 'test2' => 850);
$get_opt = get_option('my_template');
if in_array($get_opt, $switchTable)
    return $switchTable[$get_opt];
else return 950;

答案 3 :(得分:1)

我认为这是尽可能接近的。

switch(get_option('my_template'))
{
    case 'test1':
    case 'test2':
    return 850;
    break;

    default:
    return 950;
}

编辑纠正。

答案 4 :(得分:1)

这个怎么样

switch(get_option('my_template'))
{
    case 'test1':
    case 'test2':
        return 850;
        break;

    default:
        return 950;
}