Estruturas de Controle
PHP Manual / HOSPEDAGEM / Hospedagem de Sites / Registro de Domínio / Servidor Dedicado / Revenda / Web local / Php Manual Espanhol / Php Manual Francês / Php Manual Inglês

for

Loops for são os laços mais complexos em PHP. Eles se comportam como os seus compatíveis em C. A sintaxe de um loop for é:

for (expr1; expr2; expr3)
  instrucoes

A primeira expressão (expr1) é avaliada (executada) uma vez incondicionalmente no começo do loop.

No começo de cada iteração, expr2 é avaliada. Se ela é avaliada como TRUE, o loop continua e o(s) comando(s) aninhado(s) é(são) executado(s). Se é avaliada como FALSE, a execução do 'loop' termina.

No fim de cada iteração, expr3 é avaliada (executada).

Cada uma das expressões pode ser vazia ou conter múltiplas expressões separadas por vírgulas. Em expr2, todas as expressões separadas por vírgula são avaliadas mas o resultado é obtido pela última parte. expr2 vazia significa que o loop pode rodar indefinidamente (PHP considera-a implicitamente como TRUE, como em C). Isto pode não ser tão inútil quanto você pode pensar, pois freqüentemente você pode querer terminar o 'loop' usando uma instrução break condicional em vez de usar a expressão-verdade do for.

Considere os seguintes exemplos. Todos eles mostram números de 1 até 10:

<?php
/* exemplo 1 */

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

/* exemplo 2 */

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

/* exemplo 3 */

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

/* exemplo 4 */

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

Obviamente, o primeiro exemplo parece ser o mais bonito (ou talvez o quarto), mas você pode perceber que a possível utilização de expressões vazias em laços for se torna prático em algumas ocasiões.

O PHP também suporta a "sintaxe de dois-pontos" alternativa para laços for:

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

Uma coisa comum para muitos usuários para iterar arrays como no exemplo abaixo.

<?php
/*
 * Isso é uma array com alguns dados que nós queremos modificar
 * quando percorrendo o loop.
 */
$people = Array(
        Array(
'name' => 'Kalle''salt' => 856412), 
        Array(
'name' => 'Pierre''salt' => 215863)
        );

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

O problema está na segunda expressão. Este código pode ser lento por causa que ele calcula o tamanho do array em cada iteração. Desde que o tamanho nunca muda, ele pode ser otimizado facilmente usando uma variável intermediária para armazenar o tamanho e usar no loop ao invés do sizeof. O exemplo abaixo ilustra isto:

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


Estruturas de Controle
PHP Manual / HOSPEDAGEM / Hospedagem de Sites / Registro de Domínio / Servidor Dedicado / Revenda / Web local / Php Manual Espanhol / Php Manual Francês / Php Manual Inglês