В отличие от цикла while, этот цикл проверяет значение выражения не до, а после каждого прохода. Таким образом, тело цикла выполняется хотя бы один раз. Выглядит оператор так:
do {
команды;
} while(логическое_выражение) ;
После очередной итерации проверяется, истинно ли логическое_выражение, и, если это так, управление передается вновь на начало цикла, в противном случае цикл обрывается. Альтернативного синтаксиса для do-while разработчики РНР не предусмотрели.
for (инициализирующие_команды; условие_цикла; команды_после_прохода)
тело_цикла;
Как только управление доходит до цикла, первым делом выполняются операторы, включенные в инициализирующие_команды (слева направо). Эти команды перечисляются через запятую, например:
for ($i=0, $j=10, $k="Test!"; ...)
Затем начинается итерация. Сначала проверяется, выполняется ли условие_цикла (как в конструкции while). Если да, то цикл продолжается. Иначе осуществляется выход из конструкции.
<?php ## Демонстрация цикла for
for ($i=0, $k="Points"; $i<100; $i++)
$k = $k.".";
echo $k;
?>
Любой цикл for можно реализовать и через while. Например:
$i = 0; $к = "Points";
while ($i<100) {
$k = $k.".";
$i++;
}
Имеется и альтернативный синтаксис конструкции:
for (инициализирующие_команды; условие_цикла; команды_после_прохода) :
операторы;
endfor;
Очень часто, для того чтобы упростить логику какого-нибудь сложного цикла, удобно иметь возможность его прервать в ходе очередной итерации (к примеру, при выполнении какого-нибудь особенного условия). Для этого и существует инструкция break, которая осуществляет немедленный выход из цикла. Она может задаваться с одним необязательным параметром — числом, которое указывает, из какого вложенного цикла должен быть произведен выход. По умолчанию используется 1, т. е. выход из текущего цикла, но иногда применяются и другие значения:
for ($i=0; $i<count($matrix); $i++)
{
for ($j=0; $j<count($matrix[$i]); $j++) {
if ($matrix[$i][$j] == 0) break(2);
}
}
if ($i < 10) echo 'Найден нулевой элемент в матрице!';
Инструкцию break удобно использовать для циклов поисков: как только очередная итерация удовлетворяет условию, цикл заканчивается.
Инструкция continue так же, как и break, работает только "в паре" с циклическими конструкциями. Она немедленно завершает текущую итерацию цикла и переходит к новой (конечно, если выполняется условие цикла для цикла с предусловием). Точно так же, как и для break, для continue можно указать уровень вложенности цикла, который будет продолжен по возврату управления. В основном continue используется в циклах-фильтрах, когда требуется перебрать некоторое количество объектов и выбрать из них только те, которые удовлетворяют определенным условиям. Например, ниже представлен цикл, который печатает только те элементы массива $ files (имена файлов и каталогов), которые являются файлами: