Вырваться из цикла, но в пределах оператора switch php - PullRequest
31 голосов
/ 16 июля 2010

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

foreach($nodelist as $node) {
   if($metCriteria) {
       break;
   }
}

Но в моем следующем примере есть оператор switch.И если выполнено одно из условий, мне нужно выйти из цикла foreach.(Проблема в том, что разрыв используется для оператора switch)

foreach($nodelist as $node)
{
    switch($node->nodeName) {
        case "a" :
            //do something
            break;
        case "b" :
            //break out of forloop
            break;
    }
}

Должен ли я просто установить переменную в операторе switch, а затем выполнить разрыв после нее?например,

$breakout = false;
foreach($nodelist as $node)
{
    switch($node->nodeName) {
        case "a" :
            //do something
            break;
        case "b" :
            $breakout = true;
            break;
    }
    if($breakout === true) break;
}

Это лучшее решение?или это там по-другому?

Ответы [ 4 ]

58 голосов
/ 16 июля 2010

из руководства ( break )

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

11 голосов
/ 16 июля 2010

перерыв 2;

break x вырвется из такого количества уровней

8 голосов
/ 19 декабря 2016

В принятом ответе нет практического примера, позвольте мне поделиться с вами.

break 2 

означает выход из контура и переключателя.

$i = 0;
while (++$i) {
    switch ($i) {
    case 5:
        echo "At 5<br />\n";
        break 1;  /* Exit only the switch. */
    case 10:
        echo "At 10; quitting<br />\n";
        break 2;  /* Exit the switch and the while. */
    default:
        break;
    }
}
0 голосов
/ 16 июля 2010

Просто используйте {- s - это предотвратит "запуск" кода.Гораздо лучше, чем заявление о прекращении, если вы спросите меня.

...