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 switch para tratar as opções 1, 2 e 3.
  • Usar while para 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

  1. Criamos um array $opcoes que simula as escolhas do usuário: 1, 2 e 3.
  2. Inicializamos $i = 0 para percorrer o array.
  3. O loop while continua enquanto $i for menor que o número de opções.
  4. Dentro do loop, $escolha recebe o valor atual do array.
  5. O switch avalia $escolha e executa o caso correspondente.
  6. No caso 3, usamos break 2 para sair do switch e do while simultaneamente.
  7. Fora do switch, incrementamos $i para 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 break dentro dos cases: a execução "vaza" para o próximo case, imprimindo mensagens indesejadas.
  • Usar break simples no case 3: isso apenas sai do switch, e o while continuaria executando. Use break 2 ou uma variável de controle.
  • Não incrementar $i: gera loop infinito. Certifique-se de que a condição do while eventualmente 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...