Для совершения повторяемых действий в PHP, как и в других языках программирования, используются циклы. В PHP имеются следующие виды циклов:
for
while
do..while
foreach (рассматривается в теме про массивы)
Цикл for имеет следующее формальное определение:
for ([инициализация счетчика]; [условие]; [изменение счетчика]) { // действия }
Рассмотрим стандартный цикл for:
<?php for ($i = 1; $i < 10; $i++) { echo "Квадрат числа $i равен " . $i * $i . "<br/>"; } ?>
Первая часть объявления цикла - $i = 1
- создает и инициализирует счетчик - переменную $i. И перед выполнением цикла его значение будет
равно 1. По сути это то же самое, что и объявление переменной.
Вторая часть - $i < 10;
- условие, при котором будет выполняться цикл. В данном случае цикл будет выполняться, пока $i не достигнет 10.
Третья часть - $i++
- изменение счетчика на единицу. Опять же нам необязательно увеличивать на единицу. Можно уменьшать: $i--. Или, например, увеличить не на 1, на 3: $i +=3
.
В итоге блок цикла сработает 9 раз, пока значение $i не станет равным 10. И каждый раз это значение будет увеличиваться на 1. Каждое отдельное повторение цикла называется итерацией. Таким образом, в данном случае произойдет 9 итераций.
В итоге браузер отобразит нам следующий результат:
Квадрат числа 1 равен 1 Квадрат числа 2 равен 4 Квадрат числа 3 равен 9 Квадрат числа 4 равен 16 Квадрат числа 5 равен 25 Квадрат числа 6 равен 36 Квадрат числа 7 равен 49 Квадрат числа 8 равен 64 Квадрат числа 9 равен 81
Объявление цикла for
может опускать отдельный части. Например, опустить определение счетчика (он может быть определен вне цикла):
$i = 5; for (; $i < 10; $i++) { echo $i; }
Можно опустить изменение значения счетчика и изменять его внутри цикла:
$i = 0; for (; $i < 10;) { echo $i; $i += 2; }
В данном случае в цикле на каждой итерации переменная $i увеличивает значение на 2. Соответственно мы получим следующий результат:
02468
Также можно в объявлении цикла определять и использовать сразу несколько переменных:
for ($i =1, $j=1; $i + $j < 10; $i++, $j+=2) { echo "$i + $j = " . $i + $j . "<br>"; }
В данном случае в объявлении цикла определяются две переменных: $i и $j. При каждой итерации переменная $i увеличивается на 1, а $j - на 2. При этом цикл продолжается, пока сумма двух переменных не достигнет 10:
1 + 1 = 2 2 + 3 = 5 3 + 5 = 8
Также можно применять альтернативный синтаксис, при котором вместо открывающей фигурной скобки ставится двоеточие, а вместо
закрывающей фигурной скобки - ключевое слово endfor
:
for ($i = 1; $i < 10; $i++): echo "Квадрат числа $i равен " . $i * $i . "<br/>"; endfor;
Цикл while
проверяет истинность некоторого условия, и если условие истинно, то выполняются блок выражений цикла:
<?php $counter = 1; while($counter<10) { echo $counter * $counter . "<br />"; $counter++; } ?>
Если в блоке while всего одна инструкция, то фигурные скобки блока можно опустить:
<?php $counter = 0; while(++$counter<10) echo $counter * $counter . "<br />"; ?>
Также можно применять альтернативный синтаксис, при котором вместо открывающей фигурной скобки ставится двоеточие, а вместо
закрывающей фигурной скобки - ключевое слово endwhile
:
$counter = 1; while($counter<10): echo $counter * $counter . "<br />"; $counter++; endwhile;
Цикл do..while
похож на цикл while
, только теперь выполняется блок цикла, и только потом выполняется проверка условия. То есть
даже если условие ложно, то блок цикла выполнится как минимум один раз:
<?php $counter = 1; do { echo $counter * $counter . "<br />"; $counter++; } while($counter<10) ?>
Иногда возникает ситуация, когда требуется выйти из цикла, не дожидаясь его завершения. В этом случае мы можем воспользоваться оператором break:
<?php for ($i = 1; $i < 10; $i++) { $result = $i * $i; if($result>80) { break; } echo "Квадрат числа $i равен $result <br/>"; } ?>
И если вдруг результат операции окажется больше 80, то происходит выход из цикла.
Для управления циклами также применяется оператор continue. Он осуществляет переход к следующей итерации цикла:
<?php for ($i = 1; $i < 10; $i++) { if($i==5) { continue; } echo "Квадрат числа $i равен " . $i * $i . "<br/>"; } ?>
При выполнении программы, когда значение $i станет равным 5, произойдет переход к следующей итерации, а все остальные выражения, которые следуют
после оператора continue
выполняться не будут.
Циклы могут располагаться внутри циклов. Например, используем вложенный цикл, чтобы вывести таблицу умножения:
<!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <table> <?php for ($i = 1; $i < 10; $i++) { echo "<tr>"; for ($j = 1; $j < 10; $j++) { echo "<td>" . $i * $j . "</td>"; } echo "</tr>"; } ?> </table> </body> </html>
В данном случае код php помещен в элемент <table>
, то есть в нем будет создаваться таблица.
Во внешнем цикле определяется переменная-счетчик $i
. В этом - внешнем цикле на страницу выводится тег <tr>
, то есть тег строки:
for ($i = 1; $i < 10; $i++) { echo "<tr>";
Далее запускается вложенный цикл, определяется переменная-счетчик $j
. Цикл последовательно увеличивает значение переменной $j на единицу и
умножает ее значение на значение переменной $i. Результат выводится в элемент <td>
:
for ($j = 1; $j < 10; $j++) { echo "<td>" . $i * $j . "</td>";
После 9 итераций, когда переменная $j достигнет 10, вложенный цикл завершается, и внешний цикл выводит закрывающий тег строки:
echo "</tr>"; }
И запускается новая итерация внешнего цикла.
В итоге скрипт сформирует таблицу умножения: