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

  1. Escreva um laço for que imprima os números pares de 2 a 20.
  2. ✓ Resposta:
    <?php
    for ($i = 2; $i <= 20; $i += 2) {
        echo "$i ";
    }
    ?>
  3. Use um laço while para calcular a soma dos números de 1 a 100.
  4. ✓ Resposta:
    <?php
    $soma = 0;
    $i = 1;
    while ($i <= 100) {
        $soma += $i;
        $i++;
    }
    echo $soma; // 5050
    ?>
  5. Dado um array associativo de produtos com nome e preço, use foreach para exibir cada produto e seu preço.
  6. ✓ Resposta:
    <?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>";
    }
    ?>
  7. Crie um laço que imprima números de 1 a 20, mas pare quando encontrar o primeiro múltiplo de 7 (use break).
  8. ✓ Resposta:
    <?php
    for ($i = 1; $i <= 20; $i++) {
        if ($i % 7 == 0) {
            break;
        }
        echo "$i ";
    }
    // Saída: 1 2 3 4 5 6
    ?>
  9. Escreva um laço aninhado para imprimir um padrão de asteriscos em forma de triângulo retângulo de 5 linhas.
  10. ✓ Resposta:
    <?php
    for ($i = 1; $i <= 5; $i++) {
        for ($j = 1; $j <= $i; $j++) {
            echo "*";
        }
        echo "<br>";
    }
    ?>

Referências