(PHP 4, PHP 5)
O loop for é o loop mais complexo no PHP. Ele tem comportamento semelhante ao C. A sintaxe do loop for é:
for (expr1; expr2; expr3) statement
A primeira expressão (expr1) é executada incondicionalmente somente no começo do loop.
No começo de cada iteração a
expr2 é avaliada. Se a avaliação resultar em
TRUE
, o loop continua e as instruções aninhada
são executadas. Se a avaliação resultar em
FALSE
, a execução do loop termina.
No final de cada iteração, a expr3 é executada.
Cada uma das expressões podem sem vazias ou conter múltiplas
expressões separadas por vírgulas. Na expr2, todas
as expressões separadas por vírgula são avaliadas mas o resultado é
obtido da última parte.
Se a expr2 estiver vazia significa que o loop deve
ser executado indefinidamente (O PHP considera implicitamente como
TRUE
, igual ao C). Isto pode não ser tão inútil
quanto você pensa, pois muitas vezes você desejar que o loop termine usando
a instrução break
ao invés de usar a expressão verdade do
for.
Analise os seguintes exemplos. Todos exibem números de 1 até 10:
<?php
/* exemplo 1 */
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
/* exemplo 2 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++);
?>
É claro que o primeiro exemplo aparenta ser o melhor (ou talvez o quarto), mas você pode achar que usar expressões vazias no loop for seja vantajoso em algumas ocasiões.
O PHP também suporta a sintaxe alternativa "dois pontos" para o loop for.
for (expr1; expr2; expr3): statement ... endfor;
É comum para muitos usuários iterar em arrays como no example abaixo.
<?php
/*
* Esta é uma array com alguns dados que devem ser modificadoswant to modify
* durante a execuçao do loop for.
*/
$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);
}
?>
O código acima pode se tornar lento, pois o tamanho do array será calculado a cada iteração. Desde que o tamanho nunca mude, o loop pode ser facilmente otimizado usando uma variável intermediária para guardar o tamanho ao invés de executar repetidamente o 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);
}
?>