【问题标题】:Continue not going to loop start继续不打算循环开始
【发布时间】:2009-12-07 15:58:51
【问题描述】:

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

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

我在这里尝试做的是从给定数组中过滤一些值(在这种情况下它将是$_POST),它们以给定名称($dash)开头,但我想过滤掉'id'、'module'、'action'、'configure' 或 'to_pdf'。

所以我认为会起作用的是“继续”。由于 switch 语句不是循环,“继续”应该转到循环的开头(foreach),但显然这不会发生。我仍然在数组中得到我不想要的键名。

我通过稍微更改代码找到了解决方案,但我真的很想了解为什么这不起作用。

“继续”应该把我送回 foreach!!

【问题讨论】:

    标签: php logic


    【解决方案1】:

    http://docs.php.net/continue 说:

    continue 在循环结构中用于跳过当前循环迭代的其余部分 [...]
    注意:请注意,在 PHP 中 switch 语句被认为是用于 continue 的循环结构。

    【讨论】:

    • 随机排序顺序并不能完全解决快速投票答案的“问题”;-)
    【解决方案2】:

    您需要使用 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;
      }
    

    【讨论】:

      猜你喜欢
      • 2014-03-11
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 2018-09-21
      相关资源
      最近更新 更多