2010-07-16 16 views
27

Cuando normalmente quiero salir de un bucle foreach antes de que todas las iteraciones se hayan completado, simplemente utilizo un salto; declaración. p.ej.Salir forloop pero dentro de la declaración switch php

foreach($nodelist as $node) { 
    if($metCriteria) { 
     break; 
    } 
} 

Pero mi próximo ejemplo tiene una declaración de cambio en él. Y si se cumple una de las condiciones, entonces necesito romper con el ciclo foreach. (Siendo la ruptura El problema se utiliza para la sentencia switch)

foreach($nodelist as $node) 
{ 
    switch($node->nodeName) { 
     case "a" : 
      //do something 
      break; 
     case "b" : 
      //break out of forloop 
      break; 
    } 
} 

hacer yo simplemente establece una variable en la instrucción switch luego romper después de que? p.ej.

$breakout = false; 
foreach($nodelist as $node) 
{ 
    switch($node->nodeName) { 
     case "a" : 
      //do something 
      break; 
     case "b" : 
      $breakout = true; 
      break; 
    } 
    if($breakout === true) break; 
} 

Es esta la mejor solución? o esto de otra manera?

Respuesta

52

del manual (break)

ruptura acepta un argumento numérico opcional que le dice cuántas estructuras de control son para romperse fuera de.

+2

+1 gran puntero ... – pinaki

+2

+1 Esto era exactamente lo que necesitaba. Puntos de bonificación por usar un constructo de lenguaje integrado. Lo estaba haciendo hasta el estilo @Lizard hasta ahora. –

+0

5.4.0 \t Se ha eliminado la capacidad de pasar variables (por ejemplo, $ num = 2; ruptura $ num;) como el argumento numérico. –

11

break 2;

ruptura x saldrá de esa cantidad de niveles

-1

Simplemente use el {'s - evitará que el código "se ejecute". Mucho mejor que la declaración de interrupción si me preguntas.

3

La respuesta aceptada no tiene ningún ejemplo práctico permítame compartir con usted.

break 2 

medios de salida tanto de bucle y el interruptor.

$i = 0; 
while (++$i) { 
    switch ($i) { 
    case 5: 
     echo "At 5<br />\n"; 
     break 1; /* Exit only the switch. */ 
    case 10: 
     echo "At 10; quitting<br />\n"; 
     break 2; /* Exit the switch and the while. */ 
    default: 
     break; 
    } 
} 
Cuestiones relacionadas