¿Cómo puedo romper un bucle externo con PHP?


124

Estoy buscando romper un bucle externo for / foreach en PHP.

Esto se puede hacer en ActionScript así:

top : for each(var i:MovieClip in movieClipArray)
{
    for each(var j:String in nameArray)
    {
        if(i.name == j) break top;
    }
}

¿Cuál es el equivalente de PHP?


77
Siempre eche un vistazo a la documentación primero: php.net/manual/en/control-structures.break.php
Felix Kling

He publicado 2 soluciones, una con etiquetas, como en el script de acción y otra que solo usabreak
Edgar Villegas Alvarado

Respuestas:



34

PHP Manual dice

break acepta un argumento numérico opcional que le indica cuántas estructuras de cierre anidadas se deben separar.

break 2;

16

Puede usar solo una declaración break-n:

foreach(...)
{
    foreach(...)
    {
        if (i.name == j) 
            break 2; //Breaks 2 levels, so breaks outermost foreach
    }
}

Si está en php> = 5.3, puede usar etiquetas gotoys, similares a las de ActionScript:

foreach (...)
{        
    foreach (...)
    {
        if (i.name == j) 
            goto top;
    }
}
top:

Pero gotodebe usarse con cuidado. Goto es malvado (considerado una mala práctica)


1
Hay usos bastante válidos para goto. Incluso eval () no es malo (y lo es). Tiene incluso menos usos que goto.
lucian303

1
Si. Es por eso que dije "goto debe usarse con cuidado"
Edgar Villegas Alvarado

En esa nota, creo que esta página es relevante: php.net/manual/en/control-structures.goto.php
Ruggi

12

Puede usar break 2;para romper dos bucles al mismo tiempo. No es exactamente lo mismo que su ejemplo con los bucles "con nombre", pero servirá.


6
$i = new MovieClip();
foreach ($movieClipArray as $i)
{
    $nameArray = array();
    foreach ($nameArray as $n) 
        if ($i->name == $n) 
            break 2;
}

Buen intento de convertir todo el código suministrado a PHP, aunque la declaración de interrupción no hace lo que necesito que haga (solo termina el ciclo interno).
Marty

actualice su página :) Reemplacé con break 2 ... que según el Manual de PHP: "break acepta un argumento numérico opcional que le dice cuántas estructuras de
cierre

4

¿Usar goto?

for ($i = 0, $j = 50; $i < 100; $i++) 
{
  while ($j--) 
  {
    if ($j == 17) 
      goto end; 
  }  
}
echo "i = $i";
end:
echo 'j hit 17';
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.