Контролни структури
PHP Manual

for

Циклите 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
/*
* Това е масив с данни, които искаме да променим,
* докато работи цикълът for.
*/
$people = Array(
        Array(
'name' => 'Kalle''salt' => 856412), 
        Array(
'name' => 'Pierre''salt' => 215863)
        );

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

Проблемът е във втория израз на for. Този код може да бъде бавен, защото на всяка итерация трябва да изчисли размера на масива. Тъй като размерът не се променя никога, кодът може да бъде оптимизиран лесно посредством междинна променлива, в която да се съхрани размера и в цикъла да се използва тази променлива, вместо sizeof. По-долният пример илюстрира това:

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

for(
$i 0$size sizeof($people); $i $size; ++$i)
{
    
$people[$i]['salt'] = rand(000000999999);
}
?>


Контролни структури
PHP Manual