我正在尝试以下内容:
switch ($p) {
foreach ($modules as $m) {
case '"'.$mod.'"':
include 'modules/'.$m.'/cases.php';
break;
}
}
但无法让它发挥作用。是否可以在交换机内以这种方式使用for循环?
答案 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)
我认为你不能做这样的事情:立即转换声明,你唯一可以使用的是case
或default
声明。
这就是你得到的错误告诉你,顺便说一下:
Parse error: syntax error, unexpected T_FOREACH, expecting T_CASE or T_DEFAULT or '}'
如果你想要一个循环和一个swith,你必须要把循环“arround”放在整个switch语句中,或者“放在”case语句中。