Можете ли вы «выйти» из цикла в PHP? - PullRequest
107 голосов
/ 26 февраля 2009

У меня есть цикл, который выполняет некоторую проверку ошибок в моем коде 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 ]

185 голосов
/ 26 февраля 2009

Вы ищете оператор 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";
}
143 голосов
/ 26 февраля 2009

Как указано в других сообщениях, вы можете использовать ключевое слово 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
43 голосов
/ 27 февраля 2009

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

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

5 голосов
/ 26 февраля 2009

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

3 голосов
/ 22 декабря 2017

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

3 голосов
/ 10 января 2014
$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";
}
0 голосов
/ 03 января 2017

Я пробовал решения с помощью css, но у меня не получилось.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...