Оглавление
Цикл foreach
Данный цикл один из самых часто испольуемых и удобных циклов в PHP. Вам часто придётся сталкиваться с перебором массивов, обычных или ассоциативных.
$arr= [
'Январь',
'Февраль',
'Март',
'Апрель',
'Май',
'Июнь',
'Июль',
'Август',
'Сентябрь',
'Октябрь',
'Ноябрь',
'Декабрь',
];
//Вывод значений
foreach ($arr as $val) {
echo $val . '<br/>';
}
echo '<br/>';
//Можно так же дотянуться в цикле до ключей массива
foreach ($arr as $key => $val) {
echo $key . ' - ' . $val . '<br/>';
}
Результат:
Январь
Февраль
Март
Апрель
Май
Июнь
Июль
Август
Сентябрь
Октябрь
Ноябрь
Декабрь
0 - Январь
1 - Февраль
2 - Март
3 - Апрель
4 - Май
5 - Июнь
6 - Июль
7 - Август
8 - Сентябрь
9 - Октябрь
10 - Ноябрь
11 - Декабрь
Цикл for
Данный цикл выполняется до тех пор, пока выполняется заданное условие.
$arr= [
'Январь',
'Февраль',
'Март',
'Апрель',
'Май',
'Июнь',
'Июль',
'Август',
'Сентябрь',
'Октябрь',
'Ноябрь',
'Декабрь',
];
for($index = 0; $index < 3; $index++){
echo $arr[$index] . '<br/>';
}
Цикл for()
не перебирает сам массив в примере выше. Он задаёт начальное значение переменной $index = 0;
затем условие своей работы $index < 3;
пока условие истинно (т.е. значение $index
меньше 3-х) цикл будет работать. Так же указывается действие, которое нужно выполнить на каждом шаге цикла $index++
(после того, как код в фигурных скобках, так называемом «теле цикла» будет выполнен). В данном случае, переменная $index
увеличивается на единицу. Другой пример.
for($index = 0; $index <= count($arr); $index = $index + 2){
echo $arr[$index] . '<br/>';
}
Результат:
Январь
Март
Май
Июль
Сентябрь
Ноябрь
В этом примере мы поменяли как само условие
$index <= count($arr);
так и выражение, которое выполняется на каждом шаге $index = $index + 2
. Условия и шаг могут быть различными, под вашу задачу. Но обычно этот цикл используется как счётчик, в задачах типа «Обработать первые x элементов массива» или «Вывести каждый второй элемент массива».Цикл while
Этот цикл означает, что пока условие будет истинно, цикл будет работать.
$arr = [
'Январь',
'Февраль',
'Март',
'Апрель',
'Май',
'Июнь',
'Июль',
'Август',
'Сентябрь',
'Октябрь',
'Ноябрь',
'Декабрь',
];
$index = 0;
while ($index <= 5) {
echo $arr[$index] . '<br/>';
$index++; //счётчик наращиваем тут
}
Результат:
Январь
Февраль
Март
Апрель
Май
Июнь
В данном случае, пока
$index
будет меньше или равно 5, код в теле цикла будет исполняться. В целом они похожи с for()
но тут начальное значение $index
задаётся до объявления цикла, а наращивание переменной должно выполняться в теле цикла.Цикл do while
Основное отличие от обычного циклаwhile()
в том, что тело цикла будет выполнено как минимум один раз, даже если условие вернёт false
.
$arr = [
'Январь',
'Февраль',
'Март',
'Апрель',
'Май',
'Июнь',
'Июль',
'Август',
'Сентябрь',
'Октябрь',
'Ноябрь',
'Декабрь',
];
$index = 6;
do {
echo $arr[$index] . '<br/>';
$index++; //счётчик наращиваем тут
} while ($index <= 5);
Результат:
Июль
Получается начальное значение переменной $index
больше 5, однако код в теле цикла отрабатывает ДО того как условие будет проверено.Управление работой цикла
Остановка цикла break
Иногда, во время выполнения цикла, нужно прекратить его выполнение вовсе и выйти из цикла. Чтобы сделать это, вам нужно вызвать оператор break, который тут же остановит выполнение цикла.
$arr = [
'Январь',
'Февраль',
'Март',
'Апрель',
'Май',
'Июнь',
'Июль',
'Август',
'Сентябрь',
'Октябрь',
'Ноябрь',
'Декабрь',
];
foreach($arr as $key => $val){
if($key >= 3){
break;
}
echo $val . '<br/>';
}
Результат:
Январь
Февраль
Март
Апрель
Если вам нужно остановить несколько вложенных циклов сразу, следует вызвать break с цифрой означающей количество вложенных (от текущего уровня вложенности) циклов нужно остановить. Например break 2;
Переход на следующий шаг continue
Этот оператор заставляет цикл пропустить текущий шаг и перейти к следующему не выполняя код в теле цикла. В примере ниже, мы выводим только чётные месяцы года:
$arr = [
'Январь',
'Февраль',
'Март',
'Апрель',
'Май',
'Июнь',
'Июль',
'Август',
'Сентябрь',
'Октябрь',
'Ноябрь',
'Декабрь',
];
foreach($arr as $key => $val){
if((($key +1) % 2) > 0){
continue;
}
echo $val . '<br/>';
}
Результат:
Февраль
Апрель
Июнь
Август
Октябрь
Декабрь
Если вы используете вложенные циклы и вам так же нужно пропустить шаг не только на текущем уровне, но и на уровне выше, оператор continue
так же вызывается с цифрой.Мы рассмотрели наиболее распространённые случаи работы с циклами. Удачи!