Curso de PHP: #11 - Estrutura de repetição While

Curso de PHP: #11 - Estrutura de repetição While

Fala escoteiro. Mamão com açúcar até agora, não é mesmo? No post anterior aprendemos como trabalhar com Arrays e vimos vários exemplos de código. Agora vamos para as temidas Estruturas de Repetição.

Importante: Muita gente tem dificuldade em entender essas estruturas então se você não entender logo de cara, não se assuste, pare, descanse, vá jogar um videogame, e tente novamente mais tarde (quem sabe até no outro dia, com a mente mais fresca). O importante é não desistir.

O que é uma estrutura de repetição?

É uma estrutura que permite que você execute um mesmo trecho de código várias vezes. Um exemplo seria a impressão de uma lista. Não faz sentido a gente manualmente dar echo 100X para imprimir uma lista com 100 itens, seria muito trabalhosos e passível de erro.

Existem diversas estruturas de repetição no PHP, vamos conhece-las.

WHILE

While significa "enquanto", e isso meio que sugere o que ele faz. O while executa um determinado trecho de código enquanto uma condição for verdadeira, quando ela passar a não ser mais verdadeira a estrutura while desvia o fluxo do código.

Veja a imagem abaixo

image.png

Essa imagem representa bem o funcionamento básico da estrutura while.

  1. Iniciamos o programa e definimos uma variável chamada $contador que recebe como valor o número 1;
  2. Analisamos a seguinte condição: "O valor contido na variável $contador é menor ou igual a 10?" Sim é, porque o valor lá contido é 1, então ele entra no bloco do while;
  3. Dentro do bloco do while nós temos 2 comandos apenas (poderiam ter mais), são eles: imprima o valor contido na variável $contador e depois atribua um novo valor para essa variável. Esse novo valor é o valor antigo + 1, ou seja, o valor contido em $contador agora é 2 e não mais 1;
  4. O while vê que não tem mais nada para fazer e reavalia: "O valor contido na variável $contador é menor ou igual a 10?" Sim é, porque o valor lá contido agora é 2, então ele entra no bloco do while novamente e tudo vai se repetindo;
  5. Perceba que quando o valor de $contador for maior que 10 a condição do bloco while não mais será satisfeita, logo, o programa não mais entrará neste bloco do while;

Vamos ver como esse exemplo ficaria em formato de código PHP:

<?php

$contador = 1;

while ($contador <= 10) {
    echo $contador;
    $contador = $contador + 1;
}

Perceba que estruturalmente o WHILE é muito parecido com o IF.

  • Temos a palavra reservada while;
  • Temos em seguida a abertura e fechamento de parênteses (onde serão inseridas as condições booleanas);
  • E por fim temos logo depois a abertura e fechamento de chaves (que delimitam o bloco do while, ou seja, onde os comandos que serão repetidos vão ser inseridos).

Sim, mas será que o while só serve para isso? Faz sentido ter todo esse trabalho só para imprimir números na tela? Com certeza não.

Veja esse outro exemplo

<?php

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

$contador = 0;
$totalDeFrutas = count($frutas);

while ($contador < $totalDeFrutas) {
    echo $frutas[$contador];
    echo "\n";

    $contador = $contador + 1;
}

Esse código é bem mais complicado do que os outros que vimos até agora, mas vamos analisar linha a linha com calma.

  1. A primeira coisa que fizemos foi declarar uma variável $frutas e atribuir a ela um Array com 5 frutas (strings). Até aqui nada demais, não é?
  2. Em seguida declaramos uma outra variável $contador e atribuímos a ela o valor 0;
  3. Na sequência encontramos algo novo para nós, a função count(). A função count() recebe como parâmetro um array e devolve o tamanho dele ou seja, a quantidade de itens nele inclusos, e nesse caso estamos devolvendo esse valor para a variável $totalDeFrutas;
  4. Feito isso criamos uma estrutura while e passamos para ela a seguinte condição: Enquanto o valor contido na variável $contador for menor que o valor contido na variável $totalDeFrutas, repita o bloco abaixo.
  5. Daí, enquanto essa condição estiver sendo satisfeita, o bloco do while será executado e nele temos:
    1. Imprima o valor contido no índice do array $frutas referente ao valor atual da variável $contador, ou seja, na primeira volta do while o valor será 0, então ele obterá desse array e primeira posição, na segunda volta o valor será atualizado para 1, então ele obterá desse array a segundo posição e assim sucessivamente até não ter mais elementos no array.
    2. Depois ele imprime uma quebra de linha "\n";
    3. E por fim ele aumenta em 1 o valor atual da variável $contador.

Como eu sei que é um pouco complicado, vamos para mais um exemplo:

<?php

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

$contador = 1;
$totalDeFrutas = 4;

while ($contador < $totalDeFrutas) {
    echo $frutas[$contador];
    echo "\n";

    $contador = $contador + 1;
}

Esse exemplo é praticamente idêntico ao anterior, mas mudamos algumas coisas

  1. O contador agora não mais inicia em 0, ele está iniciando em 1;
  2. O total de frutas não mais pega o tamanho do Array, mas sim um valor fixo informado por mim, que é 4;

Com isso, execute e veja o que vai acontecer. Ele vai pegar apenas as frutas Coco, Uva e Caju. Consegue explicar o porquê?

Ufa! Bastante coisa para aprender não é mesmo? Vamos descansar um pouco?

No próximo post falaremos sobre mais algumas estruturas de repetição, enquanto isso pratique bastante o while 👨‍🎓.

Desafio

Crie um programa que solicite do usuário o total de frutas que ele quer cadastrar. Na sequência use o while para solicitar o nome de cada fruta. Cada fruta informada deve ser cadastrada em uma posição do Array.

Por fim, imprima na tela o nome de todas as frutas cadastradas, cada uma em uma linha

Bons estudos escoteiros!!!