php foreach continue
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 1:
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.
Solution 2:
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
Solution 3:
You are calling continue
in a for
loop, so continue will be done for the for
loop, not the foreach
one. Use:
continue 2;