Разрыв уровня в PHP - PullRequest
       8

Разрыв уровня в PHP

0 голосов
/ 19 февраля 2011

У меня есть этот фрагмент кода, и он работает просто отлично (потому что в моем примере эта переменная действительно существует в $ прибытии_ времени , поэтому она разбивается на $ k = 10 ).1005 *

$arrival_time = explode(",", $arrival_timeAll[1]);

$sizeOfArrival = sizeof($arrival_time);
$k = -1;
while (++$k < $sizeOfArrival) {
    if ($arrival_time[$k] >= $someVariable) {
            break;
    }
}

Разве это не то же самое, что этот код?Я добавил цикл while (true) и увеличил «уровень прорыва» - так что теперь это break 2 , а не просто break .Но кажется, что это бесконечный цикл.Почему?

while (true) {
    $arrival_time = explode(",", $arrival_timeAll[1]);

    $sizeOfArrival = sizeof($arrival_time);
    $k = -1;
    while (++$k < $sizeOfArrival) {
        if ($arrival_time[$k] >= $someVariable) {
            break 2;
        }
    }
}

Зачем добавлять while (true) ?Потому что мне нужно определить еще несколько операторов (которые здесь не нужны для объяснения), если внутри цикла while не найден соответствующий (если это «break» в первом случае, «break 2» во втором случае не запускается)).

В любом случае - почему это не работает?

1 Ответ

2 голосов
/ 19 февраля 2011

В некоторых случаях предикат для внутреннего цикла while никогда не срабатывает, поэтому цикл while никогда не выполняется.Поскольку у вас нет перерыва после этого, цикл будет работать вечно.Этот случай может быть, если массив пуст, 0 < 0 имеет значение false.

Начиная с $k = -1, при первом вычислении предиката $k будет 0, так как вы используете преинкрементоператор, для пустого массива это будет иметь значение false и код с запуском бесконечным.Без цикла while(true) это не вызовет никаких проблем, поскольку вы просто перепрыгнете через него.

...