Ejemplo 6: Día de la Semana

Estructura switch-case para múltiples opciones

Descargar archivo dia_semana

🎯 Demo en Vivo

Calendario Semanal

1
Lun
2
Mar
3
Mié
4
Jue
5
Vie
6
Sáb
7
Dom
Día 6
Sábado
🎉 Fin de semana

¡Selecciona un día!

1 = Lunes, 7 = Domingo

Días rápidos:

💡 Datos del día:

😴 Sábado: Único día que conserva su origen hebreo (Sabbath). Día de descanso en muchas culturas.

📖 Explicación del Código

Código PHP Completo

<?php
$dia = 6;

switch ($dia) {
    case 1:
        echo "Lunes";
        break;
    case 2:
        echo "Martes";
        break;
    case 3:
        echo "Miércoles";
        break;
    case 4:
        echo "Jueves";
        break;
    case 5:
        echo "Viernes";
        break;
    case 6:
        echo "Sábado";
        break;
    case 7:
        echo "Domingo";
        break;
    default:
        echo "No es un día de la semana";
}
?>

📝 Línea 1: Variable de control

$dia = 6;

¿Qué hace? Define la variable que controlará el flujo del switch.

¿Por qué se hace así? Switch necesita una variable para comparar con los diferentes casos.

💡 Concepto: Variable de control

En estructuras switch, una sola variable se evalúa múltiples veces contra diferentes valores posibles.

📝 Líneas 3-25: Estructura switch

switch ($dia) {
case 1:
echo "Lunes";
break;
// ... más casos ...
default:
echo "No es un día de la semana";
}

¿Qué hace? Evalúa la variable $dia contra cada caso y ejecuta el código del caso coincidente.

¿Por qué se hace así? Switch es ideal cuando tenemos una variable que puede tomar varios valores específicos.

💡 Concepto: Palabra clave break

break es crucial en switch. Sin él, PHP ejecutaría todos los casos siguientes (fall-through).

📝 Caso default

default:
echo "No es un día de la semana";

¿Qué hace? Se ejecuta cuando ningún caso coincide con la variable.

¿Por qué se hace así? Maneja valores inesperados y hace el código más robusto.

💡 Concepto: Defensive Programming

Siempre incluye un caso default para manejar valores inesperados y prevenir errores.

🔍 Anatomía de la Estructura Switch

1. Expresión switch

switch ($variable)

La variable que se evaluará contra cada caso.

2. Casos (cases)

case valor:

Cada posible valor que puede tener la variable.

3. Bloque de código

// código a ejecutar

Las instrucciones que se ejecutan si hay coincidencia.

4. Break

break;

Termina la ejecución del switch.

5. Default

default:

Se ejecuta si ningún caso coincide.

⚖️ Switch vs If-Else: ¿Cuándo usar cada uno?

✅ Usar SWITCH cuando:

  • Comparas una variable contra valores específicos
  • Tienes muchos casos (más de 3-4)
  • Las condiciones son de igualdad simple
  • El código es más legible con switch
switch ($dia) {
    case 1: echo "Lunes"; break;
    case 2: echo "Martes"; break;
    // ...
}

✅ Usar IF-ELSE cuando:

  • Las condiciones son complejas
  • Usas operadores como >, <, >=
  • Tienes pocos casos (2-3)
  • Necesitas evaluar múltiples variables
if ($edad >= 18) {
    echo "Mayor";
} else {
    echo "Menor";
}

🚀 Casos de Uso Avanzados de Switch

Múltiples casos mismo código

Varios casos pueden ejecutar el mismo código.

switch ($dia) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        echo "Día laboral";
        break;
    case 6:
    case 7:
        echo "Fin de semana";
        break;
}

Switch con strings

También funciona con cadenas de texto.

switch ($color) {
    case "rojo":
        echo "Alto";
        break;
    case "verde":
        echo "Pasar";
        break;
}

Return en switch

Puedes usar return en funciones.

function getDia($numero) {
    switch ($numero) {
        case 1: return "Lunes";
        case 2: return "Martes";
        default: return "Inválido";
    }
}

🎯 Conceptos Clave Aprendidos

Estructura Switch

  • Ideal para múltiples opciones
  • Más legible que muchos if-else
  • Solo compara por igualdad
  • Requiere break para cada caso

Control de Flujo

  • Break termina la ejecución
  • Sin break: fall-through
  • Default maneja casos no esperados
  • Orden de casos puede importar

Best Practices

  • Siempre incluir caso default
  • Usar break en cada caso
  • Mantener casos simples
  • Documentar casos complejos

💪 Ejercicio Práctico

Amplía el sistema de días

Practica estos cambios para mejorar tus habilidades:

  1. Convierte el switch a if-elseif-else y compara la legibilidad
  2. Añade información del día en inglés junto al español
  3. Crea un sistema que detecte si el día es laboral, fin de semana o festivo
  4. Implementa un switch que funcione con los nombres de los días en lugar de números
  5. Crea una función que reciba el número del día y devuelva un array con información completa

Solución 1: Con if-elseif

<?php
if ($dia == 1) {
    echo "Lunes";
} elseif ($dia == 2) {
    echo "Martes";
} elseif ($dia == 3) {
    echo "Miércoles";
} elseif ($dia == 4) {
    echo "Jueves";
} elseif ($dia == 5) {
    echo "Viernes";
} elseif ($dia == 6) {
    echo "Sábado";
} elseif ($dia == 7) {
    echo "Domingo";
} else {
    echo "No es un día de la semana";
}
?>

Solución 2: Bilingüe

<?php
switch ($dia) {
    case 1:
        echo "Lunes / Monday";
        break;
    case 2:
        echo "Martes / Tuesday";
        break;
    // ... otros días ...
}
?>

Solución 3: Tipo de día

<?php
switch ($dia) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        echo "Día laboral";
        break;
    case 6:
    case 7:
        echo "Fin de semana";
        break;
    default:
        echo "Día inválido";
}
?>

Solución 4: Con strings

<?php
$nombreDia = "lunes"; // en minúsculas

switch ($nombreDia) {
    case "lunes":
        echo "Día 1";
        break;
    case "martes":
        echo "Día 2";
        break;
    // ... otros días ...
    default:
        echo "Día no válido";
}
?>

Solución 5: Función con array

<?php
function getDiaInfo($numero) {
    switch ($numero) {
        case 1:
            return ["nombre" => "Lunes", "ingles" => "Monday", "tipo" => "laboral"];
        case 2:
            return ["nombre" => "Martes", "ingles" => "Tuesday", "tipo" => "laboral"];
        case 6:
            return ["nombre" => "Sábado", "ingles" => "Saturday", "tipo" => "fin_semana"];
        case 7:
            return ["nombre" => "Domingo", "ingles" => "Sunday", "tipo" => "fin_semana"];
        default:
            return ["nombre" => "Inválido", "ingles" => "Invalid", "tipo" => "invalido"];
    }
}

$info = getDiaInfo(1);
echo $info['nombre']; // Lunes
?>