2012-02-19 15 views
9

Tengo esta situación en la que tengo dos controles para OBTENER variables después de verificar la primera en una declaración switch dentro de la instrucción, la segunda variable debe verificarse en la segunda instrucción switch dentro del primer bucle un casoinstrucción switch php dentro de otra instrucción switch

no puedo publicar el código exacto aquí, pero aquí es un ejemplo

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
switch($_GET['parent']){ 
    case 'child1': 
     if(!isset($_GET['child'])){ 
      echo "Only parent"; 
     } 
     else{ 
      switch($_GET['child']){ 
       case 'test': 
        echo 'test'; 
        break; 
      } 
     } 
     break; 

    case 'child2': 
     echo 'child2'; 
     break; 
    default: 
      echo $_GET['parent']; 

} 
?> 

Su funcionamiento muy bien con este ejemplo de código, pero cuando realmente utilizar este procedimiento en mi servidor, el control conseguir omitido predeterminado en el padre s declaración de brujas a pesar de que tiene un valor coincidente caso

No se informó de un error y depurar cudn't más de este nivel

PLZ me ayude! Sé que quieres ver el código pero no puedo publicarlo aquí, al menos puedes guiarme para depurarlo más.

Gracias

+0

No veo un caso 'predeterminado' para el conmutador principal. ¿Qué estás obteniendo exactamente para la salida? –

+0

Bueno, no he agregado el valor predeterminado aquí, pero he agregado el problema real – pahnin

+0

. Publique la URL tal como la está ingresando, que está fallando en este script. Debería analizar 'example.com? Parent = child1' simplemente bien. –

Respuesta

26

Según la PHP Documentation Examples, es posible si el bloque de caja que contiene el interruptor de anidado es encerrar con los apoyos.

Sigue el mentioned example.

<?php 
    switch ($argc) { 
     case 'home': { 
      print('This is $argc, home case.'); 
      break; 
     } 
     case 'subsection': { 
       switch ($argd) { 
        case 'links': { 
          switch($arge) { 
           case 'display': { 
           print('This is $arge, subsection,links,display case.'); 
           break; 
           } 
          } 
        } 
       } 
     } 
    } 
?> 
2

No puedo ver ningún error en su código. Lo probé en mi máquina y funciona bien. Como también funciona bien para usted, el error sería estar en otro lugar.

No hay ninguna razón por la cual las sentencias switch anidados no debería ser posible, ya que las sentencias switch se definen de la siguiente manera:

switch($variable) { 
    case "case1": 
    [statement] 
    break; 
} 

[statement] puede ser sustituido por un simple comando, como echo "test";, una serie de comandos echo "test"; echo "test"; u otra declaración de cambio. Agregar llaves no cambia nada, ya que solo sirven para agrupar una serie de comandos, de modo que se puede usar más de un comando para la parte then en condicionales como if([condition]) [then]. La respuesta anterior, que sorprendentemente tiene 18 votaciones ascendentes para aconsejar erróneamente que agregue llaves, no cambia nada.

Para concluir, las instrucciones de cambio anidadas son posibles y la forma en que las utilizó en su muestra de código es correcta. El error está en otro lugar.

Cuestiones relacionadas