forциклы — самые сложные циклы в PHP. Они ведут себя как их аналоги C. Синтаксис forцикла:

for (expr1; expr2; expr3)
    statement

Первое выражение ( expr1 ) оценивается (выполняется) один раз безоговорочно в начале цикла.

В начале каждой итерации оценивается expr2 . Если он оценивается как true, цикл продолжается и выполняются вложенные операторы. Если он оценивается как false, выполнение цикла завершается.

В конце каждой итерации expr3 оценивается (выполняется).

Каждое из выражений может быть пустым или содержать несколько выражений, разделенных запятыми. В expr2 оцениваются все выражения, разделенные запятой, но результат берется из последней части. Пустое выражение expr2 означает, что цикл должен выполняться бесконечно (PHP неявно рассматривает его как true, как C). Это может быть не так бесполезно, как вы думаете, поскольку часто вы хотите завершить цикл, используя условный break оператор, а не forвыражение истинности.

Рассмотрим следующие примеры. Все они отображают числа от 1 до 10:

<?php
/* example 1 */

for ($i = 1; $i <= 10; $i++) {
    echo $i;
}

/* example 2 */

for ($i = 1; ; $i++) {
    if ($i > 10) {
        break;
    }
    echo $i;
}

/* example 3 */

$i = 1;
for (; ; ) {
    if ($i > 10) {
        break;
    }
    echo $i;
    $i++;
}

/* example 4 */

for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>

Конечно, первый пример кажется самым красивым (или, возможно, четвертым), но вы можете обнаружить, что возможность использовать пустые выражения в forциклах оказывается полезной во многих случаях.

PHP также поддерживает альтернативный «синтаксис с двоеточием» для forциклов.

for (expr1; expr2; expr3):
    statement
    ...
endfor;

Многие пользователи часто перебирают массивы, как в примере ниже.

<?php
/*
 * This is an array with some data we want to modify
 * when running through the for loop.
 */
$people = array(
    array('name' => 'Kalle', 'salt' => 856412),
    array('name' => 'Pierre', 'salt' => 215863)
);

for($i = 0; $i < count($people); ++$i) {
    $people[$i]['salt'] = mt_rand(000000, 999999);
}
?>

Приведенный выше код может быть медленным, поскольку размер массива извлекается на каждой итерации. Поскольку размер никогда не меняется, цикл можно легко оптимизировать, используя промежуточную переменную для хранения размера вместо многократного вызова count() :

<?php
$people = array(
    array('name' => 'Kalle', 'salt' => 856412),
    array('name' => 'Pierre', 'salt' => 215863)
);

for($i = 0, $size = count($people); $i < $size; ++$i) {
    $people[$i]['salt'] = mt_rand(000000, 999999);
}
?>