Curso de PHP: #12 - Estrutura de repetição Do While, For e Foreach

Curso de PHP: #12 - Estrutura de repetição Do While, For e Foreach

E ai escoteiro, blz? Em nosso post anterior as coisas começaram a ficar um pouco mais complicadas, mas não se assuste, todo início é difícil e requer força, foco e bastante treino. Nesse post continuaremos falando de estruturas de repetição. Se você já entendeu como o while funciona, as próximas serão melzinho na chupeta.

Do While

O nome é parecido e o funcionamento também, porém existem sutis diferenças entre o while e o do while. Enquanto o while avalia a condição e caso seja verdadeira ele começa a repetir o bloco, o do while já começa a executar e faz a verificação só depois de executar o bloco pelo menos uma vez.

Veja um exemplo:

<?php

$contador = 10;

do {
    echo $contador;
    echo "\n";

    $contador = $contador + 1;
} while ($contador < 5);

Vamos analisar calmamente linha a linha o que esse código faz:

  1. Antes de mais nada declaramos uma variável $contador com o valor 10;
  2. Na sequência, independente de qualquer coisa, o interpretador PHP entra no bloco DO e já começa a executar tudo, ou seja, ele vai imprimir o valor atual da variável $contador, que nesse caso é 10, vai imprimir a quebra de linha com o "\n" e por fim ele vai incrementar o valor atual da variável $contador, passando do valor atual que é 10 para 11;
  3. Só depois de fazer tudo isso ele vai avaliar se o valor atual da variável $contador é menor que 5, e nesse caso não é, então ele não vai repetir o que está dentro do bloco DO.

Não vou investir muito tempo na estrutura DO WHILE, porque além dela ser muito parecida com o WHILE, são poucas as situações onde é interessante usá-la.

For

A estrutura For é bem interessante, e tem o funcionamento um pouco parecido com o while, mas também se difere em alguns pontos. Basicamente tudo que é possível fazer com while é possível fazer com o for e vice-versa, então na maioria das vezes é mais uma questão de gosto pessoal.

Vamos pegar o mesmo exemplo utilizado no post anterior e reescreve-lo com a estrutura FOR.

<?php

$frutas = ["Manga", "Coco", "Uva", "Caju", "Cajá"];
$totalDeFrutas = count($frutas);

for ($i = 0; $i < $totalDeFrutas; $i++) {
    echo $frutas[$i];
    echo "\n";
}

Assim como o while, o for também recebe uma condição mas ele recebe mais algumas coisas:

  1. A primeira coisa que passamos para o for é a variável contadora, perceba que nesse exemplo eu a chamei de $i porque é um padrão usado na maioria das linguagens de programação, mas poderia tranquilamente ser $contador como no exemplo do while.
  2. O segundo item que passamos para o for é a nossa condição, nesse caso a condição passada foi $i < $totalDeFrutas
  3. E por fim passamos o "passo", o "passo" ou "step" indica como incrementaremos ou decrementaremos o nosso contador. Nesse caso eu usei o operador de pré-incremento. Daqui a pouco vamos ver como ele funciona, mas por enquanto entenda ele como uma maneira curta de escrever $i = $i + 1;
  4. Perceba que cada item passado para o for é separado por ";" (ponto e virgula) e não por "," (virgula).
  5. Tudo estando ok e a condição sendo satisfeita, o for repetirá o seu bloco.

Foreach

O Foreach é o mais fácil de entender e usar, porém é extremamente útil e muito utilizado em nosso dia-a-dia como desenvolvedor.

Veja esse exemplo e na sequência vamos analisar linha a alinha

<?php

$frutas = ["Manga", "Coco", "Uva", "Caju", "Cajá"];

foreach($frutas as $fruta) {
    echo $fruta;
    echo "\n";
}

O Foreach serve para percorrer elementos iteráveis, ou seja, arrays e outras estruturas que você aprenderá no futuro. Mas, o que seria "percorrer"?

Nesse contexto percorrer é "dar voltas" no array passando por cada elemento, então para que o foreach funciona precisamos passar para ele duas informações

  1. O array ou elemento iterável
  2. Uma variável que receberá o valor atual da iteração

Pareceu confuso? Eu explico melhor.

No exemplo acima nós, antes de mais nada, declaramos uma variável $frutas e atribuímos a ela um Array contendo 5 itens (strings);

Na sequência passamos para o foreach essa variável $frutas e dizemos: "Olha foreach, toda vez que você passar por um elemento desse Array, pegue o valor atual e salve nessa variável que estou passando aqui também". E qual é essa variável? A variável $fruta (no singular). Ou seja, para cada volta uma fruta será atribuída à variável $fruta.

Então o foreach vai entrar em ação e fazer os seguintes passos:

  1. Ler a variável $frutas e carregar na memória todos os itens do Array;
  2. Ele vai se perguntar: "Qual é o primeiro item desse Array?", "Ah, é o item Manga". Então ele vai pegar esse valor "Manga" e atribuir à variável $fruta e logo na sequência ele vai entrar no bloco de baixo que tem 2 comandos.
    1. Imprima o valor atual da variável $fruta (que nesse momento é "Manga")
    2. Imprima uma quebra de linha
  3. Terminando isso ele vai se perguntar: "Blz, qual o próximo item agora?", "Ah sim, é o Coco". Então ele vai pegar esse valor "Coco" e atribuir novamente à variável $fruta, ou seja, ele vai apagar o valor antigo e salvar esse novo, e na sequência ele vai entrar no bloco de baixo e executar os 2 comandos.

Ele vai repetir isso até que ele tenha passado por todos os itens desse Array.

Viu como é simples?

O Foreach nos permite também obter o índice do elemento que está sendo iterado naquele momento. E é bem simples.

<?php

$frutas = ["Manga", "Coco", "Uva", "Caju", "Cajá"];

foreach($frutas as $chave => $valor) {
    echo "A fruta $valor está na posição $chave do array";
    echo "\n";
}

Agora é a hora de você praticar

Desafio

Crie um programa que solicite do usuário o total de números que ele quer cadastrar, na sequência utilize um bloco for para solicitar ao usuário cada um desses números e os cadastre em um array chamado $numeros. Na sequência percorra todos os itens desse Array com o foreach mas imprima apenas os números pares (Utilize a estrutura IF para isso).

Pois é, pequeno escoteiro, estamos cada vez mais próximo do fim da nossa jornada, mas ainda falta muita coisa a ser estudada. Não fique ansioso, vamos dar um passo de cada vez. Acredite, você está se saindo melhor do que você imagina.

Até a próxima!!!