break
break прерывает выполнение текущей структуры for, foreach, while, do-while или switch.
break принимает необязательный числовой аргумент, который сообщает ему выполнение какого количества вложенных структур необходимо прервать.
$arr = array( ‘один’ , ‘два’ , ‘три’ , ‘четыре’ , ‘стоп’ , ‘пять’ );
while (list(, $val ) = each ( $arr )) if ( $val == ‘стоп’ ) break; /* Тут можно было написать ‘break 1;’. */
>
echo » $val
\n» ;
>
?php
/* Использование дополнительного аргумента. */
$i = 0 ;
while (++ $i ) switch ( $i ) case 5 :
echo «Итерация 5
\n» ;
break 1 ; /* Выйти только из конструкции switch. */
case 10 :
echo «Итерация 10; выходим
\n» ;
break 2 ; /* Выходим из конструкции switch и из цикла while. */
default:
break;
>
>
?>
| Версия | Описание |
|---|---|
| 5.4.0 | break 0; больше не допускается. В предыдущих версиях это воспринималось точно также как и break 1;. |
| 5.4.0 | Удалена возможность передачи переменных (например, $num = 2; break $num;) в виде числового аргумента. |
Выход из цикла PHP
@Visman может. Вот всегда меня вымораживала эта несправедливость с if и break , тоже ведь вложенность.
24 июл 2017 в 7:39
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Если я правильно понял, вы не хотите прерывать вложенные циклы. Не знаю с какой целью и что вы обходите, но предположу, что что-то ищите.
Можно сделать так:
foreach () < // 1 $found = 0; foreach () < // 2 foreach () < // 3 if () < $found++; >> > if ($found > 0) < break; >>
Но, может быть, лучше выделить метод:
function find() < $found = 0; foreach () < // 2 foreach () < if () < // 3 $found++; >> > return $found; > foreach () < // 1 $found = find(); if ($found >0) < break; >>
Отслеживать
ответ дан 24 июл 2017 в 8:22
Егор Банин Егор Банин
6,662 1 1 золотой знак 7 7 серебряных знаков 18 18 бронзовых знаков
А в чем смысл, если есть уже готовая команда для решения подобных костылей?
24 июл 2017 в 8:31
@nrjshka в некоторых случаях необходимо прервать не все циклы. Обычно это означает, что нужно провести декомпозицию.Чтобы вам было понятнее представьте такую задачу: есть список учеников; для каждого ученика есть список предметов, которые он изучает; по каждому предмету у ученика есть оценки; надо найти первого двоечника в списке, то есть такого ученика, у которого по одному предмету все оценки 2.
24 июл 2017 в 8:42
Опять же.Если нужно выйти из всех циклов — break без аргументов, если из 1, 2, 3, . — break 1, break 2, break 3, .
24 июл 2017 в 8:46
@nrjshka будте внимательны. break без указания аргумента выходит только из одного цикла, а не изо всех.
Как выйти из foreach php
(PHP 4, PHP 5, PHP 7, PHP 8)
break прерывает выполнение текущей структуры for , foreach , while , do-while или switch .
break принимает необязательный числовой аргумент, который сообщает ему выполнение какого количества вложенных структур необходимо прервать. Значение по умолчанию 1 , только ближайшая структура будет прервана.
$arr = array( ‘один’ , ‘два’ , ‘три’ , ‘четыре’ , ‘стоп’ , ‘пять’ );
foreach ( $arr as $val ) if ( $val == ‘стоп’ ) break; /* Тут можно было написать ‘break 1;’. */
>
echo » $val
\n» ;
>
?php
/* Использование дополнительного аргумента. */
$i = 0 ;
while (++ $i ) switch ( $i ) case 5 :
echo «Итерация 5
\n» ;
break 1 ; /* Выйти только из конструкции switch. */
case 10 :
echo «Итерация 10; выходим
\n» ;
break 2 ; /* Выходим из конструкции switch и из цикла while. */
default:
break;
>
>
?>
PHP: break, continue и goto
Часто бывает удобно при возникновении некоторых условий иметь возможность досрочно завершить цикл. Такую возможность предоставляет оператор break . Он работает с такими конструкциями как: while, do while, for, foreach или switch .
Оператор break может принимать необязательный числовой аргумент, который сообщает ему, выполнение какого количества вложенных структур необходимо завершить. Значением числового аргумента по умолчанию является 1, при котором завершается выполнение текущего цикла. Если в цикле используется оператор switch , то break/break 1 выходит только из конструкции switch .
\n"; break 1; /* Выход только из конструкции switch. */ case 10: echo "Итерация 10; выходим
\n"; break 2; /* Выход из конструкции switch и из цикла while. */ > > // другой пример for ($bar1 = -4; $bar1 < 7; $bar1++) < // проверка деления на ноль if ($bar1 == 0) < echo 'Выполнение остановлено: деление на ноль невозможно.'; break; >echo "50/$bar1 = ",50/$bar1,"
"; > ?>
Разумеется, иногда вы предпочли бы просто пропустить одну из итераций цикла, а не завершать полностью работу цикла, в таком случае это делается с помощью оператора continue .
continue
Для остановки обработки текущего блока кода в теле цикла и перехода к следующей итерации можно использовать оператор continue . От оператора break он отличается тем, что не прекращает работу цикла, а просто выполняет переход к следующей итерации.
Оператор continue также как и break может принимать необязательный числовой аргумент, который указывает на скольких уровнях вложенных циклов будет пропущена оставшаяся часть итерации. Значением числового аргумента по умолчанию является 1, при которой пропускается только оставшаяся часть текущего цикла.
"; continue; > echo "50/$bar1 = ",50/$bar1,"
"; > ?>
Обратите внимание: в процессе работы цикла было пропущено нулевое значение переменной $counter , но цикл продолжил работу со следующего значения.
goto
goto является оператором безусловного перехода. Он используется для перехода в другой участок кода программы. Место, куда необходимо перейти в программе указывается с помощью метки (простого идентификатора), за которой ставится двоеточие. Для перехода, после оператора goto ставится желаемая метка.
Простой пример использования оператора goto :
Оператор goto имеет некоторые ограничение на использование. Целевая метка должна находиться в том же файле и в том же контексте, это означает, что вы не можете переходить за границы функции или метода, а так же не можете перейти внутрь одной из них. Также нельзя перейти внутрь любого цикла или оператора switch . Но его можно использовать для выхода из этих конструкций (из циклов и оператора switch ). Обычно оператор goto используется вместо многоуровневых break .
"; > echo 'после цикла - до метки'; // инструкция не будет выполнена end: echo 'После метки'; ?>
С этой темой смотрят:
- Цикл while (do while)
- Цикл for
- Цикл foreach, перебор элементов массива
Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011 – 2023 © puzzleweb.ru | razumnikum.ru
