Foros del Web » Programando para Internet » PHP »

Switch case anidado

Estas en el tema de Switch case anidado en el foro de PHP en Foros del Web. Hola a todos: Necesito ayuda una vez más (alguien me tendria que explicar como adjudicar karma a los amables participantes que me han ayudado en ...
  #1 (permalink)  
Antiguo 17/11/2010, 04:49
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 14 años, 3 meses
Puntos: 4
Switch case anidado

Hola a todos:

Necesito ayuda una vez más (alguien me tendria que explicar como adjudicar karma a los amables participantes que me han ayudado en otras ocasiones).
El problema es el siguiente, he hecho un pequeño php basado en switch case anidado para que en función del nombre de la página en la que me encuentre presente un texto u otro para el "title" que, además cambia en función del idioma del navegador. Antes lo tenia en cada una de las páginas del proyecto, pero solo para cambiar el idioma del texto y he decidido sacarlo de las páginas para comodidad de manejo, así los cambios afectan a todas las páginas simultáneamente y me ahorro revisar una por una.
El planteamiento de la página es:


Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd ">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">

    <?php

        

    
//Detectammos el idioma del explorador

    
$Lengua substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);

    
//Detectammos el nombre de la página

    
$pagina$_SERVER['PHP_SELF']; 

    
?>

<head>

   <title><?php include('Acciones/GoogleBot.php'); ?></title>

   <meta name="description="<?php include('Acciones/GoogleBot.php'); ?>>


   <meta http-equiv="Content-Type"content=" text/html;charset=utf-8">

 <!--Aquí se indica donde está la hoja de estilos CSS -->

 <?php

    
include('Acciones/estilo_css.php');

        
?> 

   <!--Aquí se indican los estilos CSS particulares de esta hoja CSS -->

   <style></style>

  
</head >

<body>
</body>
</html>
y el código al que llamo es:


Código PHP:
<?php

    
switch ($pagina){

        case 
"/Prueba_consultor.php":

                    switch(
$Lengua){

            
//En función del idioma del navegador presentamos un texto u otro para GoogleBot

               
case "es":        
            include(
'Textos/ES/ESMetaTags/ESTituloComunicacionesCons.txt');        
            break;

               case 
"en":        
            include(
'Textos/EN/ENMetaTags/ENTituloComunicacionesCons.txt');        
            break;

             
            default:        
            include(
'Textos/EN/ENMetaTags/ENTituloComunicacionesCons.txt');        
            break;

               }            
                        
              

        case 
"/nmbs.php":

                       switch(
$Lengua){

            
//En función del idioma del navegador presentamos un texto u otro para GoogleBot

               
case "es":        
            include(
'Textos/ES/ESMetaTags/ESTituloInicioInicio.txt');        
            break;

               case 
"en":        
            include(
'Textos/EN/ENMetaTags/ENTituloInicioInicio.txt');        
            break;

              
            default:        
            include(
'Textos/EN/ENMetaTags/ENTituloInicioInicio.txt');        
            break;

                       
            }
              
  

        default:

            switch(
$Lengua){

            
//En función del idioma del navegador presentamos un texto u otro para GoogleBot

                 
case "es":        
            include(
'Textos/ES/ESMetaTags/ESTituloInicioInicio.txt');        
            break;

               case 
"en":        
            include(
'Textos/EN/ENMetaTags/ENTituloInicioInicio.txt');        
            break;

 
               default:        
            include(
'Textos/EN/ENMetaTags/ENTituloInicioInicio.txt');        
            break;
        
            }
              
               
        
        }

    
?>
El problema es que a la hora de publicar cuando miro el código html generado se publican los case para todas las páginas en lugar de unicamente el case de la página en la que estoy.
¿Cual es el error? please, please, please

Muchas gracias por adelantado,
  #2 (permalink)  
Antiguo 17/11/2010, 07:55
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Switch case anidado

Te falta el break en los 'case' del primer switch, el switch padre. El break permite salir de una estructura, ¡pero solo de una!

Código PHP:
Ver original
  1. switch($uno)
  2. {
  3.    case 1:
  4.       switch($dos)
  5.       {
  6.          case 2:
  7.             //...
  8.             break;
  9.          case 3:
  10.             //...
  11.             break;
  12.          default:
  13.             //...
  14.             break;
  15.       }
  16.       break; //Te falta este break para salir del switch padre y evitar que entre en 'case 2:'
  17.    case 2:
  18.       switch($tres)
  19.       {
  20.          case 3:
  21.             //...
  22.             break;
  23.          case 4:
  24.             //...
  25.             break;
  26.          default:
  27.             //...
  28.             break;
  29.       }
  30.       break;
  31. }

Otra forma es usando un número después del break. Este número indica el número de estructuras de las que queremos salir.
Código PHP:
Ver original
  1. switch($uno)
  2. {
  3.    case 1:
  4.       switch($dos)
  5.       {
  6.          case 2:
  7.             //...
  8.             break 2;
  9.          case 3:
  10.             //...
  11.             break 2;
  12.          default:
  13.             //...
  14.             break 2;
  15.       }
  16.    case 2:
  17.       switch($tres)
  18.       {
  19.          case 3:
  20.             //...
  21.             break 2;
  22.          case 4:
  23.             //...
  24.             break 2;
  25.          default:
  26.             //...
  27.             break 2;
  28.       }
  29. }
__________________
Revolucionario controlador de plantillas para php
www.simphple.com
  #3 (permalink)  
Antiguo 17/11/2010, 10:22
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Switch case anidado

Muchas gracias.
¿quieres decir que solo puedo anidar dos estructuras de Switch case?
o que, en el caso de que desee anidar mas de dos debo indicar en todos los break el número total de estructuras de las que hay que salir. Por ejemplo:

Código PHP:
<?php

//Preguntamos en que página estamos

        
$pagina=$_SERVER['PHP_SELF,];
  
//Preguntamos el idioma

$Lengua = substr($_SERVER['
HTTP_ACCEPT_LANGUAGE'],0,2);

    switch ($pagina){

        case "/Ana_Resultados.php":

            switch($Lengua){
            
            //En función del idioma del navegador presentamos un texto u otro en el titulo
               
               case "es":        
            include('
Textos/ES/ESMetaTags/ESTituloAnaResCon.txt');        
            break 5;

               case "en":        
            include('
Textos/EN/ENMetaTags/ENTituloAnaResCon.txt');        
            break 5;

               default:        
            include('
Textos/ES/ESMetaTags/ESTituloAnaResCon.txt');        
            break 5;
        
            }
              echo ("</title>")

               echo ("<meta name="description=" content="")
            
            switch($Lengua){

                    //En función del idioma del navegador presentamos un texto u otro 

               case "es":        
            include('
Textos/ES/ESMetaTags/ESMetaAnaRes.txt');        
            break 5;

               case "en":        
            include('
Textos/EN/ENMetaTags/ENMetaAnaRes.txt');        
            break 5;

               default:        
            include('
Textos/ES/ESMetaTags/ESMetaAnaRes.txt');        
            break 5;
        
            }
              echo (">")

        case "Ana_Resultados_Cons.php":

            switch($Lengua){

               case "es":        
            include('
Textos/ES/ESMetaTags/ESTituloAnaResCon.txt');        
            break 5;

               case "en":        
            include('
Textos/EN/ENMetaTags/ENTituloAnaResCon.txt');        
            break 5;

               default:        
            include('
Textos/EN/ENMetaTags/ENTituloAnaResCon.txt');        
            break 5;
        
            }
              echo ("</title>")

               echo ("<meta name="description=" content="")

            switch($Lengua){

               case "es":        
            include('
Textos/ES/ESMetaTags/ESMetaAnaResCon.txt');        
            break 5;

               case "en":        
            include('
Textos/EN/ENMetaTags/ENMetaAnaResCon.txt');        
            break 5;

               default:        
            include('
Textos/EN/ENMetaTags/ENMetaAnaResCon.txt');        
            break 5;
        
            }
              echo (">")

        case "Cdn_Mando.php":
            
            switch($Lengua){

               case "es":        
            include('
Textos/ES/ESMetaTags/ESTituloCuadroMando.txt');        
            break 5;

               case "en":        
            include('
Textos/EN/ENMetaTags/ENTituloCuadroMando.txt');        
            break 5;

                default:        
            include('
Textos/EN/ENMetaTags/ENTituloCuadroMando.txt');        
            break 5;
        
            }
              echo ("</title>")

               echo ("<meta name="description=" content="")

            switch($Lengua){

               case "es":        
            include('
Textos/ES/ESMetaTags/ESMetaCuadroMando.txt');        
            break 5;

               case "en":        
            include('
Textos/EN/ENMetaTags/ENMetaCuadroMando.txt');        
            break 5;

               default:        
            include('
Textos/EN/ENMetaTags/ENMetaCuadroMando.txt');        
            break 5;
        
            }
              echo (">")

        case "Cdn_Mando_Cons.php":

            switch($Lengua){

               case "es":        
            include('
Textos/ES/ESMetaTags/ESTituloCuadroMandoCons.txt');        
            break 5;

               case "en":        
            include('
Textos/EN/ENMetaTags/ENTituloCuadroMandoCons.txt');        
            break 5;

               default:        
            include('
Textos/EN/ENMetaTags/ENTituloCuadroMandoCons.txt');        
            break 5;
        
            }
              echo ("</title>")

               echo ("<meta name="description=" content="")

            switch($Lengua){

               case "es":        
            include('
Textos/ES/ESMetaTags/ESMetaCuadroMandoCons.txt');        
            break 5;

               case "en":        
            include('
Textos/EN/ENMetaTags/ENMetaCuadroMandoCons.txt');        
            break 5;

                default:        
            include('
Textos/EN/ENMetaTags/ENMetaCuadroMandoCons.txt');        
            break 5;
        
            }
              echo (">")


        default:

            switch($Lengua){

               case "es":        
            include('
Textos/ES/ESMetaTags/ESTituloInicioInicio.txt');        
            break 5;

               case "en":        
            include('
Textos/EN/ENMetaTags/ENTituloInicioInicio.txt');        
            break 5;

               default:        
            include('
Textos/EN/ENMetaTags/ENTituloInicioInicio.txt');        
            break 5;
        
            }
              echo ("</title>")

               echo ("<meta name="description=" content="")

                    switch($Lengua){

               case "es":        
            include('
Textos/ES/ESMetaTags/ESMetaInicioInicio.txt');        
            break 5;

               case "en":        
            include('
Textos/EN/ENMetaTags/ENMetaInicioInicio.txt');        
            break 5;


               default:        
            include('
Textos/EN/ENMetaTags/ENMetaInicioInicio.txt);        
            break 
5;
        
            }
              echo (
">")
        
        }

    
?>
Muchas gracias por tu ayuda
  #4 (permalink)  
Antiguo 21/09/2013, 15:26
 
Fecha de Ingreso: septiembre-2013
Mensajes: 1
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Switch case anidado

Tokkara sos un Genio, justo tenía un problema similar.

Gracias!!
  #5 (permalink)  
Antiguo 21/09/2013, 16:05
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Switch case anidado

No se ofendan pero qué horrible practica la de anidar tantas estructuras de control, y encima se podría resolver usando estructuras de datos, no hay necesidad de hardcodear.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: case, switch, anidados
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:42.