W3docs

for

Aprenda o loop for em PHP: inicialização, condição e incremento, iteração de arrays, loops aninhados, loops infinitos e erros comuns.

O Loop for em PHP

for é o loop controlado por contador do PHP. Você o utiliza quando sabe — ou pode calcular — exatamente quantas vezes um bloco de código deve ser executado, como iterar de 0 até count($array) - 1, fazer contagem regressiva ou avançar por um intervalo. Esta página aborda as três partes do cabeçalho do loop, como cada uma é executada, como iterar arrays, loops infinitos e aninhados, a sintaxe alternativa com endfor, e os erros de "off-by-one" que pegam a maioria dos iniciantes.

Se você quiser percorrer todos os elementos de um array ou object sem gerenciar um índice, foreach costuma ser a melhor opção. Para um loop que executa até que uma condição se torne falsa, veja while. Uma comparação geral de todos os tipos de loop está em PHP Loops.

Sintaxe

for (initialization; condition; increment) {
  // code to be executed on each pass
}

O cabeçalho tem três expressões, separadas por ponto e vírgula:

ExpressãoQuando é executadaUso típico
initializationUma vez, antes do loop iniciarConfigurar um contador, ex: $i = 0
conditionAntes de cada iteraçãoO loop continua enquanto for verdadeiro
incrementApós cada iteraçãoAvançar o contador, ex: $i++

A ordem de execução é: executar initialization, avaliar condition; se for verdadeira, executar o corpo, depois executar increment, depois reavalar condition, e assim por diante. No momento em que condition for falsa, o loop para e o corpo não é executado nessa última vez.

Um primeiro exemplo

<?php

for ($i = 1; $i <= 5; $i++) {
  echo $i . PHP_EOL;
}
// Output:
// 1
// 2
// 3
// 4
// 5

O contador começa em 1. Após imprimir 5, $i++ o torna 6, 6 <= 5 é falso e o loop termina — portanto, ele executa exatamente cinco vezes.

"Experimente Você Mesmo" não está disponível para este exemplo.

Iterando sobre um array

Um uso clássico do for é indexar um array. Armazene count() em uma variável (ou use o slot de incremento) para que o PHP não recontabilize o array a cada passagem:

<?php

$colors = ["red", "green", "blue"];

for ($i = 0, $n = count($colors); $i < $n; $i++) {
  echo $colors[$i] . PHP_EOL;
}
// Output:
// red
// green
// blue

Note que os índices de arrays começam em 0, então o último índice válido é count($colors) - 1. A condição usa < (não <=) exatamente por causa disso — usar <= aqui leria um elemento além do fim. Quando você só precisa dos valores e não do índice, prefira foreach, que evita toda essa classe de erros de "off-by-one".

Contagem regressiva e avanço por passos

A expressão de incremento é apenas código — ela pode decrementar ou avançar por qualquer quantidade:

<?php

// Count down
for ($i = 5; $i >= 1; $i--) {
  echo $i . " ";
}
echo PHP_EOL;
// Output: 5 4 3 2 1

// Step by 2 (even numbers only)
for ($i = 0; $i <= 10; $i += 2) {
  echo $i . " ";
}
// Output: 0 2 4 6 8 10

Múltiplas expressões e slots vazios

Cada um dos três slots pode conter várias expressões separadas por vírgula, e qualquer slot pode ser deixado vazio. Os ponto e vírgula são obrigatórios mesmo quando os slots estão em branco:

<?php

// Two counters moving toward each other
for ($i = 0, $j = 10; $i < $j; $i++, $j--) {
  echo "$i-$j" . PHP_EOL;
}
// Output:
// 0-10
// 1-9
// 2-8
// 3-7
// 4-6

Se o slot de condição estiver vazio, ele é tratado como true, o que gera um loop infinito. Você então controla a saída de dentro do corpo com break:

<?php

$i = 0;
for (;;) {
  if ($i >= 3) {
    break;
  }
  echo $i . PHP_EOL;
  $i++;
}
// Output:
// 0
// 1
// 2

Use continue para pular o restante da iteração atual e ir direto para o passo de incremento.

Loops aninhados

Colocar um for dentro de outro permite trabalhar com grades, tabelas e padrões de multiplicação. Use nomes de contador distintos para cada nível:

<?php

for ($row = 1; $row <= 3; $row++) {
  for ($col = 1; $col <= 3; $col++) {
    echo ($row * $col) . "\t";
  }
  echo PHP_EOL;
}
// Output:
// 1	2	3
// 2	4	6
// 3	6	9

O loop interno completa todas as suas iterações para cada passagem única do loop externo.

Sintaxe alternativa com endfor

O PHP oferece uma forma com dois-pontos/endfor que é conveniente ao misturar loops com HTML em templates, pois evita chaves de fechamento soltas:

<?php for ($i = 1; $i <= 3; $i++): ?>
  <p>Item <?= $i ?></p>
<?php endfor; ?>

Isso renderiza três parágrafos <p>. A mesma sintaxe alternativa existe para foreach/endforeach.

Armadilhas comuns

  • Erros de "off-by-one". $i <= count($arr) lê um slot além do fim (aviso de índice indefinido); use $i < count($arr).
  • Modificar o tamanho do array dentro do loop. Se o corpo adicionar ou remover elementos, um count() armazenado pode ficar desatualizado — verifique novamente ou mude para foreach.
  • Loops infinitos acidentais. Esquecer o incremento, ou comparar na direção errada (ex: $i-- com $i < 10), significa que a condição nunca se tornará falsa.
  • Contadores de ponto flutuante. Avançar por 0.1 acumula erros de arredondamento e pode ultrapassar o limite; faça o loop com inteiros e divida dentro do corpo.

Quando usar for

Escolha for quando a contagem de iterações é conhecida ou calculada antecipadamente e você genuinamente precisa do índice (contagens regressivas, repetição fixa, avanço por passos, construção de tabelas). Quando você simplesmente quer cada elemento de uma coleção, foreach é mais limpo e seguro. Quando o número de repetições depende de uma condição que muda dentro do loop, use while ou do...while.

Prática

Prática
Qual é o uso do loop 'for' em PHP?
Qual é o uso do loop 'for' em PHP?
Was this page helpful?