Médio PHP
Menu com switch e loop
Enunciado
Crie um menu que exiba opções e leia a escolha do usuário (simule com um array de entradas). Use switch para tratar cada opção e um loop while para repetir até que a opção 'sair' seja escolhida. As opções são: 1 - Dizer Olá, 2 - Mostrar data, 3 - Sair.
Requisitos
- Usar
switchpara tratar as opções 1, 2 e 3. - Usar
whilepara repetir o menu até a opção 3. - Imprimir mensagens correspondentes a cada opção.
- Encerrar o loop ao escolher 3.
Código inicial
<?php
$opcoes = [1, 2, 3]; // simula escolhas do usuário
$i = 0;
while ($i < count($opcoes)) {
$escolha = $opcoes[$i];
// Complete com switch
$i++;
}
Saída esperada
Olá!
Hoje é dia 01/01/2025
Saindo...
Ver dica
Dentro do switch, use break para evitar que a execução continue nos próximos casos. Para sair do loop, use break 2 ou uma flag.
Mostrar solução
<?php
$opcoes = [1, 2, 3]; // simula escolhas do usuário
$i = 0;
while ($i < count($opcoes)) {
$escolha = $opcoes[$i];
switch ($escolha) {
case 1:
echo "Olá!\n";
break;
case 2:
echo "Hoje é dia 01/01/2025\n";
break;
case 3:
echo "Saindo...\n";
break 2; // sai do switch e do while
default:
echo "Opção inválida\n";
}
$i++;
}
Passo a passo
- Criamos um array
$opcoesque simula as escolhas do usuário: 1, 2 e 3. - Inicializamos
$i = 0para percorrer o array. - O loop
whilecontinua enquanto$ifor menor que o número de opções. - Dentro do loop,
$escolharecebe o valor atual do array. - O
switchavalia$escolhae executa o caso correspondente. - No caso 3, usamos
break 2para sair doswitche dowhilesimultaneamente. - Fora do switch, incrementamos
$ipara a próxima iteração (exceto quando saímos com break 2).
Por que funciona
O switch é ideal para comparar uma variável com múltiplos valores fixos. O while permite repetir o menu. O break 2 é um recurso do PHP que quebra dois níveis de estruturas aninhadas, encerrando o loop quando o usuário escolhe sair.
Erros comuns
- Esquecer o
breakdentro dos cases: a execução "vaza" para o próximo case, imprimindo mensagens indesejadas. - Usar
breaksimples no case 3: isso apenas sai doswitch, e owhilecontinuaria executando. Usebreak 2ou uma variável de controle. - Não incrementar
$i: gera loop infinito. Certifique-se de que a condição dowhileeventualmente se torne falsa.
Outra forma de resolver
Poderia usar match com uma função anônima, mas o switch é mais tradicional e claro para menus. Uma alternativa é usar do-while se quiser que o menu apareça pelo menos uma vez.
Saída esperada
Olá!
Hoje é dia 01/01/2025
Saindo...