ProfiPHPProfiPHP
  1. Главная
  2. Самоучитель PHP 7
  3. Циклы

Циклы

Для программирования повторяющихся действий используются циклы, которые присутствуют практически во всех современных языках программирования.

Цикл While


Оператор While называется оператором цикла с предусловием и имеет следующий синтаксис:
while (условие) {
операторы;
}
Сначала выполняется условие, и, если его значение истинно (True), выполняется тело цикла, которое будет выполняться до тех пор, пока значение выражения условия не станет ложным (False). Тело цикла не обязательно должно быть заключено в фигурные скобки, если требуется выполнить только один оператор, они могут быть опущены. Однако стандарт кодирования PSR настоятельно рекомендует их использование.
<?php
$i = 'a';
while ($i <= 'e') {
echo $i;
$i++;
}
Результатом выполнения кода является строка латинских символов от символа A до E. Тело цикла, расположенное между фигурными скобками, выполняется до тех пор, пока выражение $i <= 'e' не примет значение False. При каждой итерации цикла значение счетчика $i увеличивается на один символ при помощи оператора инкремента $i++. Как только значение переменной $i превышает символ E, выражение $i <= 'e' принимает значение False и на следующей итерации оператор While прекращает свою работу.

Существует способ прекратить выполнение цикла немедленно. Для этого применяется оператор Break:
<?php
$i = 'a';
while ($i <= 'e') {
if ($i == 'c') break;
echo $i;
$i++;
}
Результатом работы скрипта является строка ab. Когда $i становится равный символу C, последний оператор Echo в цикле не выполняется.

Возможно досрочно прекратить текущую итерацию и перейти сразу к началу следующей итерации. Для этого применяется оператор Continue:
<?php
$i = 'a';
while ($i <= 'e') {
$i++;
if ($i == 'c') continue;
echo $i;
}
В данном примере, если $i равно символу C, тогда все, что следует после данного оператора в теле функции While пропускается и начинается новый цыкл.

Во вложенных циклах операторы Break по умолчанию действуют каждый на своем уровне вложения. Но можно управлять не только своим циклом, но и внешним циклом, для этого следует указать его номер. По умолчанию, если передать Break значение 1, его действия будут относиться к текущему циклу. Если оператору Break, расположенному во внутреннем цикле, передать номер 2, то вместо внутреннего цикла он будет прерывать внешний цикл.

Как и в случае операторов If и Switch, оператор While поддерживает синтаксис без фигурных скобок, с использованием ключевых слов while: и endwhile:
<?php
$i = 'a';
while ($i <= 'e'):
echo $i;
$i++;
endwhile;

Цикл do ... while


В отличие от цикла While, цикл Do ... while проверяет условие выполнения цикла не в начале итерации, а в конце и имеет следующий синтаксис:
do {
операторы;
} while (условие);
Таким образом цикл всегда будет выполнен хотя бы один раз. После выполнения тела цикла вычисляется выражение условие, и, если оно истинно (True), вновь выполняется тело цикла.
<?php
$i = 1;
do {
echo $i;
} while ($i++ < 5);
В данном примере единица всегда будет добавлена в список, независимо от значения условия ($i++ < 5). Результатом выполнения этого примера будут выведенные числа от 1 до 5.

При использовании цикла do ... while также допускается применение операторов Break и Continue. В отличие от остальных операторов цикла, а также операторов If и Switch, данный вид цикла не поддерживает альтернативный синтаксис.

Цикл For


Итерационный цикл For имеет следующий синтаксис:
for (начало; условие; тело) {
операторы;
}
Оператор Начало являет собой последовательность определений и выражений, разделяемые запятыми. Здесь устанавливаются начальные значения счетчиков и параметров цикла и вычисляются только один раз при входе в цикл. Цикл выполняется до тех пор, пока условие истинно (True), и прекращает свою работу, когда оно ложно (False). При отсутствии Условия предполагается, что его значение всегда истинно. Тело выражения вычисляется в конце каждой итерации после выполнения тела цикла. При использовании цикла For также допускается применение операторов Break и Continue.
<?php
for ($i = 'a'; $i <= 'e'; $i++) {
echo $i;
}
Результатом примера будет вывод латинских символов abcde. Здесь значение $i в самом начале работы цикла принимает значение, равное символу A ($i = 'a'), на каждой итерации цикла значение переменной $i увеличивается на 1 символ по порядку латинского алфавита при помощи оператора инкремента ($i++). Цикл выполняет свою работу до тех пор, пока значение $i меньше или равно символу E.

Разрешено использование нескольких операторов и в блоке инициализации:
<?php
for ($i = 1, $str = 'a';
!empty( $str ) && strlen( $str ) == 1;
print "$i - $str", print "<br />", $i++, $str++);
В результате работы цикла из примера будут выведены все символы латинского алфавите с порядочным номером:
1 – a
2 – b

25 - y
26 - z
Данный подход приведен лишь для демонстрации особенностей работы цикла For и не рекомендуется к применению.

Циклы For, как и любые другие циклы, могут быть вложенными друг в друга. Приведем классический пример на вложенные циклы - программа для нахождения простых чисел (числа, которые делятся только на 1 и на самих себя).
for ($i = 2; $i < 100; $i++) {
for ($j = 2; $j < $i; $j++) {
if (($i % $j) != 0) {
continue;
} else {
$flag = true;
break;
}
}
if (!$flag) echo "$i ";
$flag = false;
}
Данный пример реализован в виде двух вложенных циклов, в которых осуществляются перебор и проверка остатка от деления по модулю пары чисел. Первое число изменяется от 2 до 100, а второе - от 2 до значения первого числа. Если остаток от деления не равен нулю, то оператором Continue осуществляется продолжение внутреннего цикла, поскольку этот оператор предписывает программе перейти на следующую итерацию цикла. Если же остаток от деления равен нулю, то происходит выход из внутреннеrо цикла по оператору Break. При этом логическая переменная $flag, в которую устанавливается признак деления, принимает значение True. По окончании внутреннего цикла производится анализ логической переменной и вывод простого числа. Результат работы скрипта:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 
Как и в случае операторов If и Switch, оператор For поддерживает синтаксис без фигурных скобок с использованием ключевых слов For и Endfor:
<?php
for ($i = 'a'; $i <= 'e'; $i++) :
echo $i;
endfor;

Добавить комментарий

Имя:
Текст комментария: