打破PHP的水平

时间:2011-02-19 12:28:36

标签: php break

我有这段代码并且工作得很好(因为在我的例子中,变量确实存在于 $ arrival_time 中,所以它突破 $ k = 10

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

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

这个代码不一样吗?我添加了 while(true)循环并增加了“中断级别” - 所以它现在中断2 ,而不仅仅是中断。但似乎这是一个无限循环。为什么呢?

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循环中找不到匹配的语句(如果在第一种情况下为“break”,则在第二种情况下为“break 2”不会运行)。

无论如何 - 为什么这不起作用?

1 个答案:

答案 0 :(得分:2)

在某些情况下,内部while循环的谓词永远不会被命中,因此while循环永远不会被执行。由于你没有休息,循环将永远运行。这种情况是如果数组为空,0 < 0为假。

$k = -1开始,第一次评估谓词时,$k将为0,因为您正在使用preincrement运算符,对于空数组,这将评估为false并且运行无限的代码。没有while(true)循环,这不会导致任何问题,因为你只是直接跳过它。