Операторы break и continue в PHP
Очень часто при работе с циклами требуется пропустить итерацию из-за каких-то условий, и перейти к следующей. Кроме того, порой и вовсе нужно прервать цикл ещё до того, как он должен был завершиться. Для этого используются специальные операторы – continue (для перехода к следующей итерации) и break (остановка цикла).
Чтобы было понятнее, я предлагаю рассмотреть несколько практических примеров, которые позволят понять, когда же именно могут понадобиться эти операторы.
Пример использования break
Давайте напишем небольшой скрипт, который будет искать число в массиве. Для начала определим массив и число:
<?php
$array = [2, 3, 6, 1, 23, 2, 56, 7, 1, 15];
$number = 1;
А теперь давайте напишем простейший цикл, внутри которого мы будем выяснять, есть ли искомое число в массиве, или нет.
<?php
$array = [2, 3, 6, 1, 23, 2, 56, 7, 1, 15];
$number = 1;
$isNumberFound = false;
foreach ($array as $item) {
echo 'Сравниваем с числом элемент ' . $item . '<br>';
if ($item === $number) {
$isNumberFound = true;
}
}
echo $isNumberFound ? 'Число найдено' : 'Число не найдено';
Перед циклом мы создали переменную $isNumberFound, которая будет хранить информацию о том, найдено ли число в массиве или нет. Изначально она равна false.
Затем мы начинаем идти по массиву и сравнивать каждый его элемент с числом. Если совпадение найдено, то значение переменной $isNumberFound становится равной true, и теперь мы уже знаем, что искомое число в массиве есть.
При этом на каждой итерации перед проверкой мы выводим информацию о том, какое сравнение сейчас производится.
При этом мы видим, что все элементы массива сравнивались с числом. И мы понимаем, что нам было бы достаточно найти число и на этом завершить работу цикла. С помощью оператора break это сделать проще простого!
<?php
$array = [2, 3, 6, 1, 23, 2, 56, 7, 1, 15];
$number = 1;
$isNumberFound = false;
foreach ($array as $item) {
echo 'Сравниваем с числом элемент ' . $item . '<br>';
if ($item === $number) {
$isNumberFound = true;
break;
}
}
echo $isNumberFound ? 'Число найдено' : 'Число не найдено';
Просто останавливаем работу цикла, как только искомое число найдено. При этом мы видим, что скрипт завершился с гораздо меньшим числом действий.
Таким образом, мы сделали нашу программу более оптимизированной, так как она больше не делает лишних действий. Ещё один пример по теме вы найдёте в домашнем задании.
Пример использования continue
Не менее редко при каких-то условиях требуется перейти к следующей итерации, не доходя до конца текущей. К примеру – мы хотели бы вывести все числа от 1 до 20, за исключением тех, что делятся на 3 без остатка.
Мы могли бы решить эту задачу с помощью условия – если остаток от деления на 3 не равен нулю, то вывести число.
<?php
for ($i = 1; $i <= 20; $i++) {
if ($i % 3 != 0) {
echo $i;
echo ' ';
}
}
Однако, это можно сделать более изящно. А именно – если число делится на 3 без остатка, то просто переходить к следующей итерации и ничего не делать. А внутри тела цикла, уже вне каких-либо условий, выполнять какой-то код.
Выглядеть это будет так.
<?php
for ($i = 1; $i <= 20; $i++) {
if ($i % 3 === 0) {
continue;
}
echo $i;
echo ' ';
}
Результат работы этого кода будет таким же, как и в предыдущем случае. Но с точки зрения сложности чтения и понимания, код упростился. Я понимаю, сейчас трудно уловить эту тонкую грань, но подумайте вот о чём. В задании мы говорили о том, чтобы вывести числа, не делящиеся на 3 без остатка. Значит эти числа – первичны. А остальные числа, которые делятся на 3, нам не нужны. Значит они для нас должны иметь второстепенное значение. И в цикле мы просто отсекаем лишнее, а затем идёт основной алгоритм – вывод того, что нам нужно.
Я не жду от вас, что вы сейчас полностью поймёте о чём я говорю, но будьте уверены – со временем вы к этому придёте через практику.
А сейчас – за домашнее задание.
Комментарии