Помимо инструкции break
, завершающей
работу цикла, существует также инструкция
continue
, запускающая новую итерацию
цикла. Данная инструкция иногда может быть
полезна для упрощения кода, хотя практически
всегда задачу можно решить и без нее. Давайте
посмотрим на практическом примере.
Пусть у нас дан массив с числами. Давайте
переберем его циклом и числа, которые делятся
на 2
, возведем в квадрат и выведем
на экран, а числа, которые делятся на 3
,
возведем в куб и выведем на экран.
Вот решение описанной задачи:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
foreach ($arr as $elem) {
if ($elem % 2 === 0) {
$result = $elem * $elem;
echo $result;
} elseif ($elem % 3 === 0) {
$result = $elem * $elem * $elem;
echo $result;
}
}
?>
Как вы видите, строчка echo $result
повторяется два раза. Давайте вынесем ее
за if
, вот так:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
foreach ($arr as $elem) {
if ($elem % 2 === 0) {
$result = $elem * $elem;
} elseif ($elem % 3 === 0) {
$result = $elem * $elem * $elem;
}
echo $result; // вынесли вывод за условие
}
?>
Теперь наш скрипт, однако, работает немного
не так: получится, что и для обычных элементов,
не обработанных через наш if
, будет
выполнятся вывод переменной $result
на экран, что по условию нашей задачи нам
не нужно.
Поправим проблему, добавив к нашему if
еще условие else
, которое будет срабатывать
для элементов, не делящихся на 2
и
3
, и вызовем там инструкцию continue
,
которая сразу же будет перебрасывать нас
на новую итерацию цикла:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
foreach ($arr as $elem) {
if ($elem % 2 === 0) {
$result = $elem * $elem;
} elseif ($elem % 3 === 0) {
$result = $elem * $elem * $elem;
} else {
continue; // перейдем на новую итерацию цикла
}
echo $result; // выполнится, если делится на 2 или 3
}
?>