Если `break` — это аварийный тормоз, то `continue` — это кнопка "пропустить". Этот оператор не прерывает весь цикл, а досрочно завершает только текущую итерацию и немедленно переходит к следующей. Это чрезвычайно удобно, когда нужно отфильтровать данные "на лету" — например, пропустить обработку невалидных значений, пустых строк или элементов, не соответствующих критериям, не выходя из цикла. В этом тренажере мы подробно разберем, как работает `continue`, чем он отличается от `break`, как его применять в разных циклах для фильтрации данных и как избежать частых ловушек, например, бесконечных циклов при его неправильном использовании.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Основы: Пропуск итерации
Задача этого цикла — вывести числа от 0 до 4, но пропустить число 2. Для этого используется специальный оператор, который переходит к следующей итерации. Вставьте пропущенное ключевое слово в код.
<?php
for ($i = 0; $i < 5; $i++) {
if ($i == 2) {
// Пропускаем эту итерацию
input1S;
}
echo $i . " ";
}
?>Как `continue` влияет на результат?
Этот цикл `foreach` суммирует числа в массиве. Однако, с помощью `continue`, он должен пропускать все отрицательные числа и нули. Предскажите, какое итоговое значение будет в переменной `$sum`.
<?php
$numbers = [10, -5, 20, -15];
$sum = 0;
foreach ($numbers as $num) {
if ($num <= 0) {
continue;
}
$sum += $num;
}
echo $sum;
?>continue против break: ключевое различие
Перед вами два почти идентичных фрагмента кода. Один использует `break`, другой — `continue`. Сопоставьте каждый код с его правильным результатом, чтобы наглядно увидеть разницу в их поведении.
// Код A: с continuefor ($i = 0; $i < 4; $i++) { if ($i == 1) continue; echo $i;}// Код Б: с breakfor ($i = 0; $i < 4; $i++) { if ($i == 1) break; echo $i;}Фильтрация массива
Этот скрипт должен собрать в строку имена всех активных пользователей, пропуская тех, у кого статус 'banned'. Напишите, какая строка будет выведена в результате работы кода. Обратите внимание на пробелы и запятые.
<?php
$users = [
'Alice' => 'active',
'Bob' => 'banned',
'Charlie' => 'active'
];
$active_users_list = "";
foreach ($users as $name => $status) {
if ($status === 'banned') {
continue;
}
$active_users_list .= $name . ", ";
}
echo $active_users_list;
?>Ловушка с continue в цикле while
Этот код должен был вывести числа 0, 1, 3, 4. Но из-за неправильного расположения `continue` он создает бесконечный цикл. Исправьте строку, чтобы избежать "зависания" и получить верный результат. Это важный нюанс!
<?php$i = 0;while ($i < 5) { if ($i === 2) { continue; } echo $i . " "; $i++;}?>Соберите код для вывода четных чисел
Используя цикл `for` и оператор `continue`, соберите скрипт, который выводит только четные числа в диапазоне от 1 до 10. Нечетные числа должны быть пропущены.
for ($i = 1; $i <= 10; $i++) {continue;if ($i % 2 != 0) {}break;echo $i . " ";if ($i % 2 == 0) {<?php?>Continue во вложенном цикле
Оператор `continue` без аргумента, как и `break`, влияет только на самый внутренний цикл. Проанализируйте код и предскажите, что он выведет на экран.
<?php
for ($i = 0; $i < 2; $i++) {
echo "i=$i:";
for ($j = 0; $j < 3; $j++) {
if ($j == 1) {
continue;
}
echo " j=$j";
}
echo "\n";
}
?>