Laços de repetição
Esta aula aborda os laços de repetição em PHP, incluindo for, while, do-while e foreach, além dos comandos break e continue e o uso de laços aninhados. O conteúdo é prático e progressivo, com exemplos de código e exercícios para fixação.
Os laços de repetição são estruturas fundamentais em qualquer linguagem de programação, permitindo executar um bloco de código várias vezes de forma controlada. Em PHP, temos quatro tipos principais de laços: for, while, do-while e foreach. Cada um tem suas particularidades e é mais adequado para situações específicas.
Nesta aula, vamos explorar cada um deles em detalhes, entender como controlar o fluxo com break e continue, e ver como combinar laços para resolver problemas mais complexos. Ao final, você terá uma base sólida para usar repetições em seus projetos PHP.
for, while, do-while
O laço for é ideal quando sabemos exatamente quantas vezes o bloco deve ser executado. Sua sintaxe é: for (inicialização; condição; incremento) { ... }. A inicialização é executada uma vez, a condição é verificada antes de cada iteração, e o incremento é executado ao final de cada iteração.
Exemplo: imprimir números de 1 a 5.
<?php
for ($i = 1; $i <= 5; $i++) {
echo $i . "\n";
}
?>O laço while é usado quando a repetição depende de uma condição que pode mudar durante a execução. Ele verifica a condição antes de cada iteração; se for verdadeira, executa o bloco. Cuidado para não criar loops infinitos!
Exemplo: somar números até que o usuário digite 0 (simulado com array).
<?php
$numeros = [5, 3, 0, 2];
$soma = 0;
$i = 0;
while ($numeros[$i] != 0) {
$soma += $numeros[$i];
$i++;
}
echo "Soma até o primeiro zero: $soma";
?>O laço do-while é semelhante ao while, mas garante que o bloco seja executado pelo menos uma vez, pois a condição é verificada ao final. É útil quando precisamos que o código execute antes da primeira verificação.
Exemplo: gerar um número aleatório até que seja maior que 0.5.
<?php
do {
$num = rand(0, 10) / 10;
echo "Número: $num\n";
} while ($num <= 0.5);
?>foreach
O foreach é a estrutura mais conveniente para percorrer arrays e objetos. Ele itera sobre cada elemento sem necessidade de um contador manual. Sintaxe: foreach ($array as $valor) { ... } ou foreach ($array as $chave => $valor) { ... }.
Exemplo: percorrer um array associativo.
<?php
$pessoa = ["nome" => "João", "idade" => 30, "cidade" => "São Paulo"];
foreach ($pessoa as $chave => $valor) {
echo "$chave: $valor\n";
}
?>O foreach também pode ser usado para modificar elementos se usarmos a referência (&). Cuidado: após o loop, a variável de referência mantém a referência ao último elemento, então é recomendável usar unset() para evitar efeitos colaterais.
<?php
$numeros = [1, 2, 3, 4];
foreach ($numeros as &$valor) {
$valor *= 2;
}
unset($valor);
print_r($numeros);
?>break e continue
Os comandos break e continue permitem controlar o fluxo dentro dos laços. break interrompe completamente o laço atual; continue pula para a próxima iteração, ignorando o restante do código no bloco.
Exemplo com break: encontrar o primeiro número par em um array.
<?php
$numeros = [1, 3, 5, 6, 7];
foreach ($numeros as $num) {
if ($num % 2 == 0) {
echo "Primeiro par: $num";
break;
}
}
?>Exemplo com continue: imprimir apenas números ímpares.
<?php
for ($i = 1; $i <= 10; $i++) {
if ($i % 2 == 0) {
continue;
}
echo "$i ";
}
// Saída: 1 3 5 7 9
?>Ambos aceitam um argumento numérico opcional para indicar o nível do laço aninhado a ser interrompido ou continuado. Por exemplo, break 2 sai de dois laços internos.
Laços aninhados
Laços aninhados são laços dentro de outros laços. São comuns para trabalhar com matrizes bidimensionais ou para gerar combinações. Cada iteração do laço externo executa o laço interno completamente.
Exemplo: gerar uma tabuada de 1 a 3.
<?php
for ($i = 1; $i <= 3; $i++) {
for ($j = 1; $j <= 10; $j++) {
echo "$i x $j = " . ($i * $j) . "\n";
}
echo "\n";
}
?>É importante ter cuidado com a complexidade: laços aninhados podem levar a muitas iterações e impactar o desempenho. Sempre avalie se há uma abordagem mais eficiente.
Boas práticas
- Prefira
foreachpara percorrer arrays, a menos que precise do índice manualmente. - Evite modificar a variável de iteração dentro do laço, a menos que seja intencional.
- Use
breakecontinuecom moderação para não tornar o código difícil de seguir. - Em laços aninhados, considere extrair o laço interno para uma função se a lógica ficar complexa.
Referências
- PHP: for - Manual
- PHP: while - Manual
- PHP: do-while - Manual
- PHP: foreach - Manual
- PHP: break - Manual
- PHP: continue - Manual
- PHP: Estruturas de Controle - Manual
Exercícios
Escreva um script PHP que use um laço
forpara imprimir os números pares de 1 a 20.✓ Resposta:<?php for ($i = 2; $i <= 20; $i += 2) { echo $i . "\n"; } ?>Crie um array com nomes de frutas e use
foreachpara exibir cada nome em uma linha.✓ Resposta:<?php $frutas = ["maçã", "banana", "laranja", "uva"]; foreach ($frutas as $fruta) { echo $fruta . "\n"; } ?>Utilize um laço
whilepara calcular o fatorial de 5 (5!).✓ Resposta:<?php $num = 5; $fatorial = 1; while ($num > 0) { $fatorial *= $num; $num--; } echo "Fatorial: $fatorial"; ?>Escreva um script que use
do-whilepara gerar números aleatórios entre 1 e 10 até que o número 7 seja gerado. Exiba cada número gerado.✓ Resposta:<?php do { $num = rand(1, 10); echo "$num "; } while ($num != 7); ?>Crie dois arrays de números e use laços aninhados para imprimir todas as combinações de soma entre os elementos (um de cada array).
✓ Resposta:<?php $array1 = [1, 2, 3]; $array2 = [10, 20, 30]; foreach ($array1 as $a) { foreach ($array2 as $b) { echo "$a + $b = " . ($a + $b) . "\n"; } } ?>