我在理解这个错误时遇到了一些麻烦。 这是代码:
function filter_optionsfordash(array $data,$dash) {
$filtered_options = array();
$len = strlen($dash);
foreach ($data as $k => $value) {
if (substr($k,0,$len) === $dash) {
$option_name = trim(str_replace($dash . '_','',$k));
switch ($option_name) {
case 'displayColumns':
$value = explode(',',$value);
break;
case 'dashletTitle':
$option_name = 'title';
break;
case 'id':
case 'module':
case 'action':
case 'configure':
case 'to_pdf':
continue;
break;
}
$filtered_options[$option_name] = $value;
}
}
return $filtered_options;
}
我在这里尝试做的是从give数组中过滤一些值(在这种情况下它将是$_POST
),它以给定的名称($dash
)开头,但我想要过滤出'id','module','action','configure'或'to_pdf'。
所以我认为可行的是'继续'。由于switch语句不是循环,'continue'应该转到循环的开头(foreach),但显然这不会发生。我仍然在数组中获得我不想要的关键名称。
我已经找到了一个解决方案,通过稍微改变代码,但我真的很想知道为什么这不起作用。
'继续'应该让我回到foreach !!
答案 0 :(得分:4)
http://docs.php.net/continue说:
continue在循环结构中用于跳过剩余的当前循环迭代[...]
注意:请注意,在PHP中,switch语句被认为是一个循环结构,用于continue。
答案 1 :(得分:3)
您需要使用continue 2:
function filter_optionsfordash(array $data,$dash) {
$filtered_options = array();
$len = strlen($dash);
foreach ($data as $k => $value) {
if (substr($k,0,$len) === $dash) {
$option_name = trim(str_replace($dash . '_','',$k));
switch ($option_name) {
case 'displayColumns':
$value = explode(',',$value);
break;
case 'dashletTitle':
$option_name = 'title';
break;
case 'id':
case 'module':
case 'action':
case 'configure':
case 'to_pdf':
continue 2;
break;
}
$filtered_options[$option_name] = $value;
}
}
return $filtered_options;
}