Loops em PHP com a Instrução Break
Em PHP, as instruções break e continue oferecem controle preciso sobre loops, permitindo sair antecipadamente ou pular iterações com facilidade.
Ao escrever um loop em PHP, muitas vezes você precisa de um controle mais refinado do que "executar cada iteração". Duas instruções fornecem esse controle: break sai do loop antecipadamente, e continue pula o restante da iteração atual. Esta página aborda ambas, incluindo como aplicá-las a loops aninhados com break N e continue N.
Entendendo a Instrução Break
A instrução break encerra o loop atual (ou switch) imediatamente e transfere o controle para a primeira instrução após o loop. Use-a quando você encontrou o que estava procurando, ou quando continuar seria inútil ou inseguro — por exemplo, ao encontrar um registro correspondente ou ao atingir uma condição de erro.
break funciona dentro de loops for, foreach, while e do...while, bem como dentro de uma instrução switch.
Nota: Usar
breakfora de um loop ou instruçãoswitchprovoca um erro fatal em PHP.
Usando a Instrução Break em um Loop For
Em um loop for, a instrução break pode ser usada para interromper o loop quando uma condição específica for atendida. Por exemplo, o código a seguir usa um loop for para pesquisar um número em um array:
Exemplo PHP de break em loop for
Neste código, o loop será interrompido assim que o valor de $numbers[$i] for igual a 3. A saída deste código será "Found 3 at index 2".
Usando a Instrução Break em um Loop Foreach
Em um loop foreach, a instrução break funciona de maneira semelhante ao loop for. O código a seguir usa um loop foreach para pesquisar um valor específico em um array associativo:
Exemplo PHP de break em loop foreach
Neste código, o loop será interrompido assim que a chave $color for igual a "green". A saída deste código será "green has hex code #00FF00".
Saindo de Loops Aninhados
A instrução break também pode ser usada para sair de loops aninhados. Quando uma instrução break é usada dentro de um loop aninhado, apenas o loop mais interno é encerrado.
Por exemplo, o código a seguir usa dois loops aninhados para pesquisar um valor específico em um array bidimensional:
Exemplo PHP de break em loops aninhados
Neste código, a instrução break 2 é usada para sair de dois níveis de aninhamento. A saída deste código será Found 5 at [1][1].
O número após break indica quantos loops envolventes devem ser encerrados, não um índice de loop. break 1 é o mesmo que um break simples, e o número não pode ser maior que a profundidade real de aninhamento.
Entendendo a Instrução Continue
Enquanto break sai completamente do loop, continue apenas pula o restante da iteração atual e avança diretamente para a próxima. O próprio loop continua em execução. Esta é a escolha natural quando você deseja ignorar alguns itens, mas ainda processar todo o resto.
O loop a seguir imprime todos os números de 1 a 10, exceto os pares:
Exemplo PHP de continue em um loop for
<?php
for ($i = 1; $i <= 10; $i++) {
if ($i % 2 == 0) {
continue; // skip even numbers
}
echo "$i ";
}
?>A saída é 1 3 5 7 9 — quando $i é par, continue pula o echo e o loop avança para o próximo valor.
Continue em um Loop Foreach
continue é especialmente útil em um loop foreach quando você deseja filtrar itens conforme avança. Aqui ignoramos qualquer produto que esteja fora de estoque:
Exemplo PHP de continue em um loop foreach
<?php
$products = array(
array("name" => "Pen", "stock" => 12),
array("name" => "Notebook", "stock" => 0),
array("name" => "Eraser", "stock" => 5),
);
foreach ($products as $product) {
if ($product["stock"] === 0) {
continue; // don't list sold-out items
}
echo $product["name"] . " (" . $product["stock"] . " in stock)\n";
}
?>Isso imprime Pen e Eraser, pulando o Notebook fora de estoque.
Pulando Múltiplos Níveis com continue N
Assim como break N, continue N pula para a próxima iteração de um loop externo. continue 2, por exemplo, reinicia o loop um nível acima:
Exemplo PHP de continue 2 em loops aninhados
<?php
for ($i = 1; $i <= 3; $i++) {
for ($j = 1; $j <= 3; $j++) {
if ($j == 2) {
continue 2; // jump to the next $i
}
echo "i=$i j=$j\n";
}
}
?>O loop interno sempre imprime apenas j=1, porque ao atingir j == 2 o loop externo é reiniciado. A saída é i=1 j=1, i=2 j=1, i=3 j=1.
Break vs. Continue
| Instrução | Efeito |
|---|---|
break | Para o loop completamente; a execução continua após o loop. |
continue | Pula o restante da iteração atual; o loop continua. |
break N | Sai de N loops aninhados de uma só vez. |
continue N | Pula para a próxima iteração do loop N níveis acima. |
Armadilhas Comuns
continueem um loopdo...whileainda reavalia a condição. Ele não ignora o teste de condição, portanto o loop ainda pode terminar após umcontinue.continuese comporta de forma diferente dentro deswitch. Dentro de umswitchque está dentro de um loop,continueage comobreakpara oswitche emite um aviso no PHP moderno. Usebreakpara sair doswitch, e reservecontinuepara o loop envolvente.- Erro de deslocamento com
continueem um loopforé raro porque o incremento da instruçãoforé executado normalmente — mas em um loopwhilevocê deve atualizar o contador antes decontinue, caso contrário pode criar um loop infinito.
Conclusão
As instruções break e continue oferecem controle preciso sobre a execução de loops: break sai de um loop antecipadamente, enquanto continue pula uma iteração e continua. As formas break N e continue N estendem esse controle para loops aninhados. Em seguida, revise como os diferentes tipos de loop funcionam — for, foreach, while e do...while.