Laços de repetição
Esta aula aborda os laços de repetição em PHP, essenciais para executar blocos de código múltiplas vezes. Você aprenderá os comandos for, while, do-while, foreach, além de break e continue, com exemplos práticos e exercícios.
Laços de repetição (ou loops) são estruturas de controle que permitem executar um bloco de código repetidamente enquanto uma condição for verdadeira. Em PHP, temos os laços for, while, do-while e foreach. Cada um tem sua sintaxe e uso ideal. Além disso, as palavras-chave break e continue permitem controlar o fluxo dentro dos laços. Vamos explorar cada um deles com exemplos práticos.
for, while, do-while
O laço for é usado quando sabemos exatamente quantas vezes o bloco deve ser executado. Sua sintaxe possui três partes: inicialização, condição e incremento. O laço while executa um bloco enquanto uma condição for verdadeira; é útil quando o número de iterações não é conhecido antecipadamente. Já o do-while é similar ao while, mas garante que o bloco seja executado pelo menos uma vez, pois a condição é verificada ao final.
Exemplo de for para imprimir números de 1 a 5:
<?php
for ($i = 1; $i <= 5; $i++) {
echo "$i ";
}
// Saída: 1 2 3 4 5
?>
Exemplo de while que lê dados até que uma condição seja atingida:
<?php
$contador = 1;
while ($contador <= 5) {
echo "$contador ";
$contador++;
}
// Saída: 1 2 3 4 5
?>
Exemplo de do-while que sempre executa pelo menos uma vez:
<?php
$contador = 1;
do {
echo "$contador ";
$contador++;
} while ($contador <= 5);
// Saída: 1 2 3 4 5
?>
foreach
O foreach é um laço específico para percorrer arrays e objetos. Ele itera sobre cada elemento do array, atribuindo o valor atual a uma variável. É a forma mais simples e segura de percorrer arrays em PHP, pois não requer controle manual de índices.
Exemplo com array indexado:
<?php
$frutas = array("maçã", "banana", "laranja");
foreach ($frutas as $fruta) {
echo "$fruta ";
}
// Saída: maçã banana laranja
?>
Exemplo com array associativo, usando chave e valor:
<?php
$idades = array("João" => 25, "Maria" => 30, "Pedro" => 22);
foreach ($idades as $nome => $idade) {
echo "$nome tem $idade anos. ";
}
// Saída: João tem 25 anos. Maria tem 30 anos. Pedro tem 22 anos.
?>
break e continue
break interrompe imediatamente a execução do laço, saindo dele. Já continue pula o restante do bloco na iteração atual e vai para a próxima iteração. Ambos podem receber um argumento numérico opcional para indicar quantos níveis de laço aninhado devem ser afetados.
Exemplo de break em um laço for:
<?php
for ($i = 1; $i <= 10; $i++) {
if ($i == 5) {
break;
}
echo "$i ";
}
// Saída: 1 2 3 4
?>
Exemplo de continue pulando números pares:
<?php
for ($i = 1; $i <= 10; $i++) {
if ($i % 2 == 0) {
continue;
}
echo "$i ";
}
// Saída: 1 3 5 7 9
?>
Exemplo com break 2 saindo de dois laços aninhados:
<?php
for ($i = 1; $i <= 3; $i++) {
for ($j = 1; $j <= 3; $j++) {
if ($i == 2 && $j == 2) {
break 2;
}
echo "($i,$j) ";
}
}
// Saída: (1,1) (1,2) (1,3) (2,1)
?>
Laços aninhados
Laços aninhados são laços dentro de outros laços. São úteis para percorrer estruturas bidimensionais, como matrizes, ou gerar combinações. É importante ter cuidado com o desempenho, pois o número total de iterações é o produto dos limites.
Exemplo de laço aninhado para imprimir uma tabuada de 1 a 5:
<?php
for ($i = 1; $i <= 5; $i++) {
for ($j = 1; $j <= 5; $j++) {
echo "$i x $j = " . ($i * $j) . "\t";
}
echo "<br>";
}
?>
Exemplo com array multidimensional:
<?php
$matriz = array(
array(1, 2, 3),
array(4, 5, 6),
array(7, 8, 9)
);
foreach ($matriz as $linha) {
foreach ($linha as $valor) {
echo "$valor ";
}
echo "<br>";
}
?>
Boas práticas
Ao usar laços, evite loops infinitos certificando-se de que a condição se tornará falsa. Prefira foreach para percorrer arrays, pois é mais legível. Use break e continue com moderação para não dificultar a compreensão do fluxo. Em laços aninhados, considere extrair a lógica para funções se ficar muito complexo.
Exercícios
- Escreva um laço
forque imprima os números pares de 2 a 20. - Use um laço
whilepara calcular a soma dos números de 1 a 100. - Dado um array associativo de produtos com nome e preço, use
foreachpara exibir cada produto e seu preço. - Crie um laço que imprima números de 1 a 20, mas pare quando encontrar o primeiro múltiplo de 7 (use
break). - Escreva um laço aninhado para imprimir um padrão de asteriscos em forma de triângulo retângulo de 5 linhas.
<?php
for ($i = 2; $i <= 20; $i += 2) {
echo "$i ";
}
?>
<?php
$soma = 0;
$i = 1;
while ($i <= 100) {
$soma += $i;
$i++;
}
echo $soma; // 5050
?>
<?php
$produtos = array(
"Camiseta" => 29.90,
"Calça" => 89.90,
"Tênis" => 199.90
);
foreach ($produtos as $nome => $preco) {
echo "$nome: R$ " . number_format($preco, 2, ',', '.') . "<br>";
}
?>
<?php
for ($i = 1; $i <= 20; $i++) {
if ($i % 7 == 0) {
break;
}
echo "$i ";
}
// Saída: 1 2 3 4 5 6
?>
<?php
for ($i = 1; $i <= 5; $i++) {
for ($j = 1; $j <= $i; $j++) {
echo "*";
}
echo "<br>";
}
?>