Question
I am trying to skip to the next iteration of the loop if certain conditions are not met. The problem is that the loop is continuing regardless.
Where have I gone wrong?
Updated Code sample in response to first comment.
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
Solution
If you are trying to have your second continue
apply to the foreach
loop, you will have to change it from
continue;
to
continue 2;
This will instruct PHP to apply the continue
statement to the second nested loop, which is the foreach
loop. Otherwise, it will only apply to the for
loop.
OTHER TIPS
The second continue is in another loop. This one will only "restart" the inner loop. If you want to restart the outer loop, you need to give continue a hint how much loops it should go up
continue 2;
See Manual
You are calling continue
in a for
loop, so continue will be done for the for
loop, not the foreach
one. Use:
continue 2;
The continue
within the for
loop will skip within the for
loop, not the foreach
loop.