继续不循环开始

时间:2009-12-07 15:58:51

标签: php logic

我在理解这个错误时遇到了一些麻烦。 这是代码:

 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 !!

2 个答案:

答案 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;
  }