Como posso quebrar um loop externo com PHP?

124

Eu estou olhando para quebrar um loop for / foreach externo em PHP.

Isso pode ser feito no ActionScript da seguinte maneira:

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

Qual é o equivalente em PHP?

Marty
fonte
7
Sempre dê uma olhada na documentação primeiro: php.net/manual/en/control-structures.break.php
Felix Kling
Eu publiquei 2 soluções, um com rótulos, como no script de ação e outros que usa apenasbreak
Edgar Villegas Alvarado

Respostas:

34

O manual do PHP diz

break aceita um argumento numérico opcional que informa quantas estruturas encerradas aninhadas devem ser quebradas.

break 2;
Shakti Singh
fonte
16

Você pode usar apenas uma instrução break-n:

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

Se você estiver no php> = 5.3, poderá usar rótulos gotoes, como no ActionScript:

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

Mas gotodeve ser usado com cuidado. Goto é mau (considerado uma má prática)

Edgar Villegas Alvarado
fonte
1
Existem usos bastante válidos para o goto. Até eval () não é mau (e é). Ele tem menos usos que o goto.
lucian303 31/05
1
Sim. É por isso que eu disse "goto deve ser usado com cuidado"
Edgar Villegas Alvarado
Nessa nota Eu acredito que esta página é relevante: php.net/manual/en/control-structures.goto.php
RUGGI
12

Você pode usar break 2;para interromper dois loops ao mesmo tempo. Não é exatamente o mesmo que o seu exemplo com os loops "nomeados", mas serve.

Jon
fonte
6
$i = new MovieClip();
foreach ($movieClipArray as $i)
{
    $nameArray = array();
    foreach ($nameArray as $n) 
        if ($i->name == $n) 
            break 2;
}
Jordan Arseno
fonte
Boa tentativa de converter todo o código fornecido para PHP, embora a instrução break não faça o que eu preciso (ela termina o loop interno).
Marty
atualize sua página :) Substituí a quebra 2 ... que, de acordo com o Manual do PHP: "break aceita um argumento numérico opcional que informa quantas estruturas anexas aninhadas devem ser quebradas".
Jordan Arseno
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';
Petr Abdulin
fonte