Veamos, switch no realiza una comparación estricta entre la variable y los casos, sino mas bien una flexible (
Referencia). Mira esto:
Código php:
Ver original$a = "hola"
switch($a == "hola") {
case "actualidad":{echo "Texto actualidad";} break;
case "noticias": {echo "Texto noticias";} break;
case "deportes": {echo "Texto deportes";} break;
}
Verás que te imprime "Texto actualidad". Obviamente, la condición ($a == "hola") devuelve true, por lo que sería lo mismo poner:
Código php:
Ver originalswitch(true) {
case "actualidad":{echo "Texto actualidad";} break;
case "noticias": {echo "Texto noticias";} break;
case "deportes": {echo "Texto deportes";} break;
}
Y con este segundo código el resultado es el mismo. Qué está pasando?
Si en el switch intentas poner una comparación (como
$variable == "valor"), el switch se hará en base al resultado de dicha comparación, que puede ser
true o
false. Ahora, como te dije más arriba, switch realiza comparaciones flexibles. Si revisas las tablas de comparación en el link que puse al inicio, verás que
true comparada de manera flexible con cualquier cadena de texto, como "actualidad" o "deportes" devuelve true (Osea,
true == "lo que sea"). Por eso se cumple la primera condición en el switch y se ejecuta su contenido, y el switch se detiene.
Lo mismo sucede en tu caso, al poner
$_GET['imp'] == 1, estás comparando $_GET['imp'] con 1, lo cuál es verdadero (
true), pues en la URL pones tupagina.php?imp=1. Por eso al evaluar en el primer caso con "actualidad" se cumple la condición y el switch termina, al igual que en el ejemplo que te puse.
Esto sólo para aclarar algunas cosas. La "solución" es la que te dio
korg1988 en el mensaje anterior.
Saludos,