Можете ли вы выйти из цикла в PHP?

У меня есть цикл, который выполняет некоторую проверку ошибок в моем PHP-коде. Первоначально это выглядело примерно так...

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
}

Это работает хорошо и хорошо, но он все еще проходит, несмотря на то, что после одной ошибки это не нужно. Есть ли способ избежать цикла?

Ответ 1

Вы ищете break.

$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";
}

Ответ 2

Как указано в других сообщениях, вы можете использовать ключевое слово break. Одна вещь, на которую намекали, но не объяснили, что ключевое слово может принимать числовое значение, чтобы сообщить PHP, сколько уровней нужно сломать.

Например, если у вас три петли foreach, вложенные друг в друга, пытаясь найти часть информации, вы можете сделать "break 3", чтобы выйти из всех трех вложенных циклов. Это будет работать для структур "for", "foreach", "while", "do-while" или "switch".

$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

Ответ 3

break; оставляет ваш цикл.

continue; пропускает любой код для остатка этого цикла и переходит к следующему циклу, пока условие все еще верно.

Ответ 4

Вы можете использовать ключевое слово break.

Ответ 5

$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";
}

Ответ 6

Все это хорошие ответы, но я хотел бы предложить еще один, который я считаю лучшим стандартом кода. Вы можете использовать флаг в условии цикла, который указывает, следует ли продолжать цикл и избегать использования break все вместе.

$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";
}

Я считаю, что это лучшая практика кода, поскольку она не зависит от области применения break. Скорее, вы определяете переменную, которая указывает, следует ли прерывать определенный цикл. Это полезно, когда у вас много циклов, которые могут быть или не быть вложенными или последовательными.

Ответ 7

Я пробовал решения с помощью CSS, но ни один из них не помог мне.

Замена href="#" на href="javascript:void(0);" сработала, так как в этом случае модальный режим не переходит наверх и остается в позиции элемента события.