Lecciones de PHP - Lección 8-2 - El operador switch
En la lección anterior conocimos el operador if. Este nos permite comprobar si una condición es verdadera y, según el resultado, ejecutar las acciones necesarias.
Ahora imaginemos que necesitamos hacer diez comprobaciones y, dependiendo de los resultados, ejecutar una de diez acciones. Por supuesto, podríamos usar if como en este ejemplo:
<?php
if($x == 1){
// acciones
}
if($x == 2){
// acciones
}
if($x == 3){
// acciones
}
if($x == 4){
// acciones
}
if($x == 5){
// acciones
}
if($x == 6){
// acciones
}
if($x == 7){
// acciones
}
if($x == 8){
// acciones
}
if($x == 9){
// acciones
}
if($x == 10){
// acciones
}
?>
Este método funcionará, pero para casos así es mejor usar el operador switch.
PHP switch
El operador switch permite comprobar el valor de una expresión bajo múltiples condiciones. Vamos a reescribir el ejemplo anterior usando switch:
<?php
switch ($x){
case 1:
// acciones
break;
case 2:
// acciones
break;
case 3:
// acciones
break;
case 4:
// acciones
break;
case 5:
// acciones
break;
case 6:
// acciones
break;
case 7:
// acciones
break;
case 8:
// acciones
break;
case 9:
// acciones
break;
case 10:
// acciones
break;
default:
// acciones si ninguna de las anteriores coincidió
}
?>
Como mencioné antes, ambos ejemplos funcionan igual, pero en el caso de switch hemos agregado default, que se ejecuta si $x no es igual a ningún valor de 1 a 10.
Veamos cómo funciona la estructura switch. Primero va la palabra clave switch, seguida de paréntesis con la expresión a evaluar. Esa expresión puede ser una variable numérica o de texto. Por ejemplo:
<?php
switch ($x){
case 'Hello':
// acciones
break;
case 'Bye':
// acciones
break;
}
?>
Luego vienen llaves. Dentro de ellas especificamos los valores posibles con case y las acciones correspondientes.
<?php
switch ($x){
case 'Hello': // valor esperado
print $x; // acciones
break; // fin de esta rama
case 2:
$x++;
break;
}
?>
El valor a comprobar se indica en case. Si es texto, se encierra entre comillas; si es número, no es necesario. Luego va el signo de dos puntos. Después escribimos las acciones a realizar y finalizamos con break;, que indica el final de esa rama. Si olvidamos break;, el switch continuará ejecutando el siguiente case.
Al final se puede usar default, que se ejecuta si ninguno de los case fue cierto. Dos cosas importantes:
1. No olvides escribir break; después de cada bloque de acciones.
2. Después de default no es obligatorio escribir break;, ya que es el último bloque.
A continuación se muestra el diagrama de flujo de un switch:

Como ejemplo, supongamos que $D representa el número de días desde el lunes. El día actual se determina con el resto de la división entre 7:
<?php
// $D: número de días desde el lunes
$x = $D % 7;
switch ($x){
case 1:
print 'lunes';
break;
case 2:
print 'martes';
break;
case 3:
print 'miércoles';
break;
case 4:
print 'jueves';
break;
case 5:
print 'viernes';
break;
case 6:
print 'sábado';
break;
case 7:
print 'domingo';
break;
}
?>