W3docs

Técnicas de Iteração em PHP: Um Guia Completo

Aprenda loops em PHP: for, while, do-while e foreach com exemplos executáveis, além de break, continue, loops aninhados e dicas para escolher o loop certo.

Os loops permitem executar o mesmo bloco de código repetidamente sem precisar copiá-lo e colá-lo. Em vez de escrever dez declarações echo, você escreve uma e diz ao PHP para repeti-la dez vezes. Quase todo programa real itera sobre algo: linhas de um banco de dados, itens de um carrinho de compras, linhas de um arquivo ou números em um intervalo.

O PHP oferece quatro estruturas de loop:

  • for — quando você sabe quantas vezes repetir ou precisa de um contador.
  • while — repete enquanto uma condição for verdadeira (você pode não saber quantas vezes com antecedência).
  • do...while — igual ao while, mas o corpo sempre é executado pelo menos uma vez.
  • foreach — o loop ideal para percorrer cada elemento de um array.

Esta página aborda a sintaxe de cada um, como controlar loops com break e continue, loops aninhados e como escolher o mais adequado.

Loops for

Um loop for repete um bloco um número conhecido de vezes. Seu cabeçalho tem três partes separadas por ponto e vírgula:

for (initializer; condition; update) {
  // body
}
  1. O inicializador é executado uma vez, antes de o loop começar — geralmente para configurar um contador.
  2. A condição é verificada antes de cada iteração. O loop continua enquanto ela for true e para no momento em que se torna false.
  3. A atualização é executada após cada iteração — geralmente para incrementar o contador.
php— editable, runs on the server

Aqui $i começa em 0, o corpo é executado enquanto $i < 10, e $i++ adiciona 1 após cada passagem. O loop imprime The number is 0 até The number is 9 — dez linhas. Observe que ele para em 9, não em 10, porque a condição $i < 10 já é falsa quando $i chega a 10. Os operadores relacionais usados aqui (<, ++) são abordados em operadores PHP.

Loops while

Um loop while repete enquanto sua condição for verdadeira. Use-o quando o número de iterações não for fixo com antecedência — por exemplo, lendo até o final de um arquivo.

php— editable, runs on the server

Isso imprime as mesmas dez linhas que o exemplo com for acima. A diferença é puramente estilística: com while você gerencia o contador por conta própria ($i = 0 antes do loop, $i++ dentro dele). Esquecer o $i++ faria a condição permanecer verdadeira para sempre — um loop infinito, o bug de loop mais comum.

Loops do-while

Um loop do...while é como o while, mas verifica a condição após executar o corpo. Isso significa que o corpo sempre é executado pelo menos uma vez, mesmo que a condição seja falsa desde o início.

php— editable, runs on the server

Isso também imprime de 0 a 9. O comportamento de "pelo menos uma vez" é importante quando a condição depende de algo que o corpo do loop produz — por exemplo, solicitar uma entrada ao usuário e repetir apenas se a entrada for inválida. Observe o ponto e vírgula após while (...); ele é obrigatório aqui.

Loops foreach

Um loop foreach percorre cada elemento de um array, um de cada vez. É a forma mais limpa de iterar sobre uma coleção porque você nunca gerencia um índice manualmente.

A forma mais simples fornece cada valor:

php— editable, runs on the server

Em cada passagem, $value contém o próximo elemento, portanto isso imprime Red, Green e depois Blue.

Para arrays associativos, use a forma $key => $value para ler tanto a chave quanto o valor:

php— editable, runs on the server

Isso imprime Peter is 32, Quagmire is 30 e Joe is 34. O foreach preserva a ordem de inserção, portanto os elementos saem na ordem em que foram definidos.

Controle de loop: break e continue

Às vezes você precisa parar um loop antecipadamente ou pular uma única passagem. É para isso que servem break e continue, e eles funcionam em todos os tipos de loop.

Instrução break do PHP

A instrução break para o loop imediatamente e salta para o código após ele.

php— editable, runs on the server

Quando $i chega a 5, o break encerra o loop, portanto isso imprime apenas Number: 0 a Number: 4.

Instrução continue do PHP

A instrução continue pula o restante da iteração atual e vai direto para a próxima — o loop em si continua.

php— editable, runs on the server

Aqui o continue pula a iteração em que $i == 5, portanto todos os números exceto 5 são impressos: Number: 0 a Number: 4 e depois Number: 6 a Number: 9.

Loops aninhados

Você pode colocar um loop dentro de outro. O loop interno é executado completamente em cada passagem do loop externo. É assim que você cria grades, tabelas e tabelas de multiplicação.

<?php

for ($row = 1; $row <= 3; $row++) {
  for ($col = 1; $col <= 3; $col++) {
    echo $row * $col . "\t";
  }
  echo "\n";
}

?>

O loop externo é executado três vezes (uma por linha); para cada linha, o loop interno é executado três vezes (uma por coluna), imprimindo uma grade de multiplicação 3×3. Observe que dentro de um loop aninhado, break e continue afetam apenas o loop em que estão. Para sair de mais de um nível de uma vez, você pode passar um número: break 2; sai de dois loops.

Qual loop devo usar?

SituaçãoMelhor escolha
Você conhece a contagem de iterações ou precisa de um contadorfor
Repetir enquanto uma condição for verdadeira, contagem desconhecidawhile
Como while, mas o corpo deve ser executado pelo menos uma vezdo...while
Processar cada elemento de um arrayforeach

Na dúvida com arrays, opte pelo foreach — é o mais legível e o mais difícil de errar, pois não há índice para gerenciar e nenhum risco de sair dos limites.

Conclusão

Os quatro loops do PHP cobrem todos os padrões de repetição que você encontrará: for para loops contados, while e do...while para loops orientados a condição, e foreach para arrays. Combine-os com break e continue para controlar o fluxo e aninhe-os para trabalhar com grades e tabelas. Quando os loops se tornarem naturais, combine-os com instruções condicionais, a instrução switch e funções para estruturar programas completos.

Prática

Prática
Quais dos seguintes são tipos de loop válidos em PHP?
Quais dos seguintes são tipos de loop válidos em PHP?
Was this page helpful?