2010-11-24 2 views
33

Я пытаюсь перейти к следующей итерации цикла, если определенные условия не выполняются. Проблема в том, что цикл продолжается независимо.php foreach continue

Где я пошла не так?

Обновленный образец кода в ответ на первый комментарий.

foreach ($this->routes as $route => $path) { 
     $continue = 0; 

     ... 

     // Continue if route and segment count do not match. 
     if (count($route_segments) != $count) { 
      $continue = 12; 
      continue; 
     } 

     // Continue if no segment match is found. 
     for($i=0; $i < $count; $i++) { 
      if ($route_segments[$i] != $segments[$i] && ! preg_match('/^\x24[0-9]+$/', $route_segments[$i])) { 
       $continue = 34; 
       continue; 
      } 
     } 

     echo $continue; die(); // Prints out 34 
+1

Вы переписываете `$ continue`. Вполне возможно, что он будет установлен в 1, затем 2 в ваших итерациях цикла. – 2010-11-24 18:11:25

+1

Установите `$ continue = 0;` сразу после `foreach` ... Готов поспорить, вы больше не получите` 1`. A для 2, вам нужно сказать, чтобы он продолжал до 2 уровней, поэтому `continue 2;`, иначе он просто перейдет к следующей итерации цикла `for` ... – ircmaxell 2010-11-24 18:14:44

ответ

87

Если вы пытаетесь, чтобы ваш второй continue применить к петле foreach, вам придется изменить его от

continue; 

в

continue 2; 

Это будет инструктировать PHP применять оператор continue ко второму вложенному циклу, который представляет собой цикл foreach. В противном случае он применим только к циклу for.

11

Второй продолжить находится в другом цикле. Этот будет только «перезапускать» внутренний цикл. Если вы хотите, чтобы перезапустить внешний контур, вы должны дать продолжать намек, сколько петель он должен идти вверх

continue 2; 

См Manual

0

continue внутри цикла for будет пропускать внутри цикла for , а не цикл foreach.

7

Вы звоните continue в for цикле, поэтому по-прежнему будет сделано для for цикла, а не foreach один. Использование:

continue 2; 
Смежные вопросы