«выключить» из переключателя, затем «продолжить» в цикле - PullRequest
7 голосов
/ 21 ноября 2011

Можно ли отключиться от коммутатора, а затем продолжить цикл?

Например:

$numbers= array(1,2,3,4,5,6,7,8,9,0);
$letters = array('a', 'b', 'c', 'd', 'e', 'f', 'g');

foreach($letters as $letter) {
    foreach($numbers as $number) {
        switch($letter) {
           case 'd':
               // So here I want to 'break;' out of the switch, 'break;' out of the
               // $numbers loop, and then 'continue;' in the $letters loop.
               break;
        }
    }

    // Stuff that should be done if the 'letter' is not 'd'.

}

Можно ли это сделать, и какой будет синтаксис?

Ответы [ 3 ]

15 голосов
/ 21 ноября 2011

Вы хотите использовать break n

break 2;

После разъяснения выглядит так, как вы хотите continue 2;

8 голосов
/ 21 ноября 2011

Вместо break используйте continue 2.

5 голосов
/ 18 июня 2014

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

Если бы он хотел выйти из коммутатора и просто закончить цикл числа,тогда break 2; было бы хорошо.continue 2; просто продолжил бы цикл числа и продолжал бы итерацию по нему, чтобы каждый раз быть continue '.

Ergo, правильный ответ должен быть continue 3;.

Идетна комментарий в документах continue в основном идет до конца структуры, для switch это так (будет похоже на break), для циклов, которые он подхватит на следующей итерации.

См .: http://codepad.viper -7.com / dGPpeZ

Пример для случая выше n / a:

<?php
    echo "Hello, World!<pre>";

$numbers= array(1,2,3,4,5,6,7,8,9,0);
$letters = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i');

$i = 0;
foreach($letters as $letter) {
    ++$i;
    echo $letter . PHP_EOL;
    foreach($numbers as $number) {
        ++$i;
        switch($letter) {
           case 'd':
               // So here I want to 'break;' out of the switch, 'break;' out of the
               // $numbers loop, and then 'continue;' in the $letters loop.
              continue 3; // go to the end of this switch, numbers loop iteration, letters loop iteration
            break;
           case 'f':
            continue 2; // skip to the end of the switch control AND the current iteration of the number's loop, but still process the letter's loop
            break;
           case 'h':
            // would be more appropriate to break the number's loop
            break 2;

        }
        // Still in the number's loop
        echo " $number ";
    }


    // Stuff that should be done if the 'letter' is not 'd'.
    echo " $i " . PHP_EOL;

}

Результаты:

Hello, World!
a
 1  2  3  4  5  6  7  8  9  0  11 
b
 1  2  3  4  5  6  7  8  9  0  22 
c
 1  2  3  4  5  6  7  8  9  0  33 
d
e
 1  2  3  4  5  6  7  8  9  0  46 
f
 57 
g
 1  2  3  4  5  6  7  8  9  0  68 
h
 70 
i
 1  2  3  4  5  6  7  8  9  0  81 

continue 2; не только обрабатывает буквенный цикл для буквы d, но даже обрабатывает остальную часть числового цикла (обратите внимание, что $i увеличивается и печатается после f).(Что может быть, а может и не быть желательным ...)

Надеюсь, что это поможет кому-то еще, кто окажется здесь первым.

...