Можете ли вы "выйти" из цикла в 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
}

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

7 102

7 ответов:

вы ищете перерыв заявление.

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

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

$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

break; выходит из цикла.

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

использовать перерыв

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

все это хорошие ответы, но я хотел бы предложить еще один, который я считаю лучшим стандартом кода. Вы можете использовать флаг в условии цикла, который указывает, следует ли продолжать цикл и избегать использования 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";
}

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

Я пробовал решения с css, но не мог работать для меня.

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