Você pode 'sair' um loop em PHP?

votos
97

Eu tenho um loop que está fazendo alguma verificação de erros no meu código PHP. Originalmente, parecia algo assim ...

foreach($results as $result) {
    if (!$condition) {
        $halt = true;
        ErrorHandler::addErrorToStack('Unexpected result.');
    }

    doSomething();
 }

if (!$halt) {
    // do what I want cos I know there was no error
}

Isso funciona tudo muito bem, mas ainda é um loop através apesar após um erro ele não precisa. Existe uma maneira de escapar do loop?

Publicado 26/02/2009 em 03:44
fonte usuário
Em outras línguas...                            


7 respostas

votos
164

Você está olhando para o intervalo comunicado.

$arr = array('one', 'two', 'three', 'four', 'stop', 'five');
while (list(, $val) = each($arr)) {
    if ($val == 'stop') {
        break;    /* You could also write 'break 1;' here. */
    }
    echo "$val<br />\n";
}
Respondeu 26/02/2009 em 03:47
fonte usuário

votos
131

Conforme indicado em outros lugares, você pode usar a palavra-chave pausa. Uma coisa que foi sugerido, mas não explicou é que a palavra-chave pode ter um valor numérico para contar PHP quantos níveis de romper com.

Por exemplo, se você tem três foreach loops aninhados um no outro tentando encontrar um pedaço de informação, você poderia fazer 'break 3' para sair de todos os três laços aninhados. Isto irá funcionar para o 'for', 'foreach' 'enquanto', 'fazer-tempo', ou estruturas 'Mudar'.

$person = "Rasmus Lerdorf";
$found = false;

foreach($organization as $oKey=>$department)
{
   foreach($department as $dKey=>$group)
   {
      foreach($group as $gKey=>$employee)
      {
         if ($employee['fullname'] == $person)
         {
            $found = true;
            break 3;
         }
      } // group
   } // department
} // organization
Respondeu 26/02/2009 em 03:58
fonte usuário

votos
40

break; deixa o seu loop.

continue; ignora qualquer código para o restante do circuito e vai para o próximo ciclo, desde que a condição ainda é verdade.

Respondeu 27/02/2009 em 03:03
fonte usuário

votos
5

utilização pausa

Respondeu 26/02/2009 em 03:45
fonte usuário

votos
2
$arr = array('one', 'two', 'three', 'four', 'stop', 'five');
foreach ($arr as $val) {
    if ($val == 'stop') {
        break;    /* You could also write 'break 1;' here. */
    }
    echo "$val<br />\n";
}
Respondeu 10/01/2014 em 03:14
fonte usuário

votos
1

Todas estas são boas respostas, mas eu gostaria de sugerir mais um que eu sinto é um padrão de código melhor. Você pode optar por usar uma bandeira na condição de loop que indica se ou não continuar looping e evitar o uso de breaktodos juntos.

$arr = array('one', 'two', 'three', 'four', 'stop', 'five');
$length = count($arr);
$found = false;
for ($i = 0; $i < $length && !$found; $i++) {
    $val = $arr[$i];
    if ($val == 'stop') {
        $found = true; // this will cause the code to 
                       // stop looping the next time 
                       // the condition is checked
    }
    echo "$val<br />\n";
}

Eu considero que isso seja uma prática melhor código porque não contam com o escopo que breaké usado. Em vez disso, você define uma variável que indica se ou não para quebrar um ciclo específico. Isto é útil quando você tem muitos laços que podem ou não podem ser aninhados ou sequenciais.

Respondeu 21/12/2017 em 21:41
fonte usuário

votos
-2

Eu tentei soluções com css, mas não conseguiu funcionou para mim.

Substituindo href="#"a href="javascript:void(0);"já trabalhou como neste caso modal não saltar para cima e permanece na posição de elemento evento.

Respondeu 03/01/2017 em 08:26
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more