for

Оновлено: 11.05.2023

Цикли for є найскладнішими циклами в PHP. Вони поводяться подібно до своїх аналогів у мові C. Синтаксис циклу for наступний:

for (expr1; expr2; expr3)
    statement

Перший вираз (expr1) обчислюється (виконується) один раз безумовно на початку циклу.

На початку кожної ітерації обчислюється expr2. Якщо вона дорівнює true, цикл продовжується і виконуються вкладені оператори. Якщо вона дорівнює false, виконання циклу завершується.

В кінці кожної ітерації обчислюється (виконується) expr3.

Кожен з виразів може бути порожнім або містити декілька виразів, розділених комами. В expr2 обчислюються всі вирази, розділені комою, але результат береться з останньої частини. порожній expr2 означає, що цикл буде виконуватися до нескінченності (PHP неявно вважає це істинним, як і C). Це може бути не так марно, як ви можете подумати, оскільки часто ви хочете завершити цикл за допомогою оператора умовного переривання замість того, щоб використовувати вираз істинності 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.

Для багатьох користувачів ітерація по масивах, як у наведеному нижче прикладі, є звичним явищем.

<?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);
}
?>