Для совершения повторяемых действий в 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>"; }
И запускается новая итерация внешнего цикла.
В итоге скрипт сформирует таблицу умножения: