是否可以在交换机内使用for循环?

时间:2009-09-07 22:42:08

标签: php for-loop switch-statement

我正在尝试以下内容:

 switch ($p) {
    foreach ($modules as $m) {
    case '"'.$mod.'"':
    include 'modules/'.$m.'/cases.php';
    break;
    }
 }

但无法让它发挥作用。是否可以在交换机内以这种方式使用for循环?

6 个答案:

答案 0 :(得分:6)

我认为不是......

基本和更短的解决方案:

foreach($modules AS $m) {
    if($p == $m) {
        include 'modules/'.$m.'/cases.php';
        break;
    }
}

但最好的是:

if(in_array($p, $modules))
    include 'modules/'.$p.'/cases.php';

答案 1 :(得分:1)

是和否

您需要将foreach移到switch之外或case选择器内。我不确定为什么switch()甚至是必要的。为什么不对每个模块做任何事情而不通过交换机运行它?

大多数语言都不允许你跳进内部块。即使他们这样做,也不是一个好习惯。

答案 2 :(得分:1)

看起来像某种形式的Duff's device - 但我不认为这在C之外的任何地方都是合法的。

答案 3 :(得分:0)

如果你想做一些事情,比如确定$ p是否在$ modules中,如果是这样,包括它,那么可能有一种比switch语句更好的方法。

答案 4 :(得分:0)

你当然可以在交换机内使用循环。但是,你不能做你想做的事情;它只是不起作用。我也没有看到任何意义。为什么不只是将模块名称作为键的数组,然后执行

if ($modules[$p]) {
  include $modules[$p];
} else {
  // not found...
}

或其他相似之处?

答案 5 :(得分:0)

我认为你不能做这样的事情:立即转换声明,你唯一可以使用的是casedefault声明。

这就是你得到的错误告诉你,顺便说一下:

Parse error: syntax error, unexpected T_FOREACH, expecting T_CASE or T_DEFAULT or '}'

如果你想要一个循环和一个swith,你必须要把循环“arround”放在整个switch语句中,或者“放在”case语句中。

相关问题