for

(PHP 4, PHP 5, PHP 7)

Цикл for самый сложный цикл в PHP. Он ведет себя так же как его аналог в языке C. Синтаксис цикла for следующий:

for (expr1; expr2; expr3)
    statement

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

В начале каждой итерации оценивается выражение expr2. Если оно принимает значение TRUE, то цикл продолжается, и вложенные операторы будут выполнены. Если оно принимает значение FALSE, выполнение цикла заканчивается.

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

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

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

<?php
/* пример 1 */

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

/* пример 2 */

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

/* пример 3 */

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

/* пример 4 */

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

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

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

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

Перебор массивов как показано ниже - это обычное дело для многих пользователей.

<?php
/*
 * Это массив с некоторыми данными, которые мы хотим изменить
 * при работе цикла.
 */
$people = array(
    array(
'name' => 'Kalle''salt' => 856412),
    array(
'name' => 'Pierre''salt' => 215863)
);

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

Вышеприведенный код может работать медленно, так как размер массива вычисляется в каждой итерации. Поскольку размер не меняется, цикл может быть легко оптимизирован с помощью промежуточной переменной, в которую будет записан размер массива, вместо повторяющихся вызовов функции 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(000000999999);
}
?>