我有这段代码并且工作得很好(因为在我的例子中,变量确实存在于 $ 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”不会运行)。
无论如何 - 为什么这不起作用?
答案 0 :(得分:2)
在某些情况下,内部while循环的谓词永远不会被命中,因此while循环永远不会被执行。由于你没有休息,循环将永远运行。这种情况是如果数组为空,0 < 0
为假。
从$k = -1
开始,第一次评估谓词时,$k
将为0
,因为您正在使用preincrement运算符,对于空数组,这将评估为false并且运行无限的代码。没有while(true)
循环,这不会导致任何问题,因为你只是直接跳过它。