У меня есть цикл, который выполняет некоторую проверку ошибок в моем 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 }
Это работает хорошо и хорошо, но оно все еще проходит, несмотря на то, что после одной ошибки это не нужно. Есть ли способ избежать цикла?
Вы ищете заявление о нарушении .
$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, сколько уровней нужно сломать.
Например, если у вас три петли 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
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++) { 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
. Скорее, вы определяете переменную, которая указывает, следует ли разорвать определенный цикл. Это полезно, если у вас много циклов, которые могут быть или не быть вложенными или последовательными.
Я пробовал решения с css, но не мог работать для меня.
Замена href="#"
на href="javascript:void(0);"
работал, так как в этом случае модальная не прыгает вверх и не остается на позиции элемента события.