Циклы

Последнее обновление: 11.03.2021

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

  • for

  • while

  • do..while

  • foreach (рассматривается в теме про массивы)

Цикл for

Цикл 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

Цикл 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

Цикл do..while похож на цикл while, только теперь выполняется блок цикла, и только потом выполняется проверка условия. То есть даже если условие ложно, то блок цикла выполнится как минимум один раз:

<?php
$counter = 1;
do
{
	echo $counter * $counter . "<br />";
	$counter++;
}
while($counter<10)
?>

Операторы continue и break

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

И запускается новая итерация внешнего цикла.

В итоге скрипт сформирует таблицу умножения:

Циклы for, while, do-while в PHP
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850