Nas últimas aulas aprendemos a utilizar estruturas de repetição para executar automaticamente um conjunto de instruções várias vezes.
Por exemplo:
Também aprendemos a percorrer arrays:
Nestes exemplos, o ciclo percorre normalmente todas as iterações previstas.
Mas nem sempre queremos que isso aconteça.
Podemos precisar de:
- terminar um ciclo antes do fim;
- ignorar determinada iteração;
- procurar um valor e parar quando o encontrarmos;
- executar um ciclo dentro de outro ciclo;
- percorrer estruturas de dados mais complexas.
Nesta aula vamos aprender a controlar melhor os ciclos utilizando:
e conhecer os ciclos aninhados.
1. Controlar um ciclo
Considere:
O comportamento normal é:
Temos dez iterações.
Mas imagine que queremos parar quando chegarmos ao número 5.
Precisamos de uma forma de dizer ao PHP:
Termina imediatamente este ciclo.
Para isso podemos utilizar break.
2. A instrução break
Já conhecemos break da estrutura switch.
Também podemos utilizá-la nos ciclos.
Exemplo:
Resultado:
Quando:
a condição torna-se verdadeira e é executado:
O ciclo termina imediatamente.
3. Como funciona o break?
Podemos representar o processo desta forma:
O break não ignora apenas uma iteração.
O
breaktermina completamente o ciclo onde é executado.
4. Procurar um valor
Uma aplicação bastante útil do break é uma pesquisa.
Considere:
Queremos percorrer os produtos até encontrar "Monitor".
O PHP percorre:
Não existe necessidade de continuar a procurar depois de termos encontrado o produto.
5. Saber se encontramos o produto
Podemos melhorar o exemplo.
No final:
A variável:
funciona como um indicador.
Inicialmente:
Se encontrarmos o produto:
Esta técnica é muito utilizada em programação.
6. A instrução continue
Existe outra situação.
Imagine que queremos percorrer os números de 1 a 10, mas não queremos apresentar o número 5.
Não queremos terminar o ciclo.
Queremos apenas ignorar essa iteração.
Utilizamos:
Exemplo:
Resultado:
Repare que o ciclo não terminou no número 5.
Apenas não executou o restante código dessa iteração.
7. Como funciona o continue?
Podemos pensar:
Esta diferença deve ficar muito clara:
8. break ou continue?
Considere:
Com break
Resultado:
Com continue
Resultado:
Portanto:
| Instrução | O que acontece? |
|---|---|
break | Termina completamente o ciclo |
continue | Passa imediatamente para a próxima iteração |
9. Um exemplo mais realista com continue
Considere um conjunto de classificações:
Vamos imaginar que:
significa que o aluno faltou e, por isso, esse valor não deve ser processado.
Podemos fazer:
Resultado:
Quando encontra -1, o PHP passa diretamente para a próxima iteração.
10. Filtrar produtos
Vamos utilizar algo mais próximo das futuras páginas dinâmicas.
Queremos apresentar apenas os produtos com stock.
Quando o stock é zero:
faz com que esse produto não seja apresentado.
Conceptualmente:
11. Ciclos aninhados
Tal como podemos colocar um if dentro de outro if, também podemos colocar um ciclo dentro de outro ciclo.
Chamamos a isto:
ciclos aninhados.
Exemplo:
Resultado:
Temos:
12. Compreender os ciclos aninhados
No exemplo anterior:
O ciclo exterior executa:
Para cada uma dessas vezes, o ciclo interior executa:
Portanto:
A instrução:
é executada 12 vezes.
13. Representação dos ciclos aninhados
Podemos imaginar:
O ciclo interior é executado novamente sempre que começa uma nova iteração do ciclo exterior.