Продолжать не собираюсь начинать цикл - PullRequest
1 голос
/ 07 декабря 2009

У меня возникли проблемы с пониманием этой ошибки. Вот код:

 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 ]

4 голосов
/ 07 декабря 2009

http://docs.php.net/continue говорит:

continue используется в структурах цикла для пропуска оставшейся части итерации текущего цикла [...]
Примечание. Обратите внимание, что в PHP оператор switch считается циклической структурой для продолжения.
3 голосов
/ 07 декабря 2009

Вам нужно использовать продолжить 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;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...