for()循环无法停止循环


for() loop fails to stop looping ?

我正在尝试打印一个数组,直到它为空。这是我的代码:

for ($i=0; $array[0][$i]!=NULL; ++$i){
echo $array[0][$i];
}

然而,它看起来像是多做了一次回声,我不知道为什么?这是我对一个数组的输出,该数组包含到数组[0][2]的数据。我确信数组[0][3]是空的,我用if(array[0][3]==NULL) 尝试过

Test 0
Test 1
Test 2
( ! ) Notice: Undefined offset: 3 in C:'... on line 9

知道吗?

循环时应该使用数组长度。。。或者试试这个:

foreach($array[0] as $val) {
    echo $val;
}

这真的很有道理。PHP不能神奇地知道下一个id(在您的示例中,索引号"3")没有设置,它必须访问变量才能确定。这也是你收到通知的原因。

简而言之,它不执行for循环的主体,但必须执行测试来确定是否继续。

无论如何,使用foreach循环,或者先计算数组中的项数,然后递增$i,直到它们匹配为止。

实际工作的代码的可能替代方案。

foreach($array[0] as $val)
    if($val===null)
        break;
    else
        echo $val;

$arrlen=count($array[0]);
for($i=0;$i<$arrlen;$i++)
    if($array[0][$i]===null)
        break;
    else
        echo $array[0][$i];

甚至

$i=0;
while($array[0][$i]!==null) { //not recommended, can cause infinite loop
   echo $array[0][$i];
   $i++;
}

它抛出错误的原因是因为不存在的数组索引不等于NULL。您可以将代码修改为:

for ($i=0; isset($array[0][$i]); ++$i){
  echo $array[0][$i];
}

或者试试这个:

$ctr = count($array[0]);
for ($i = 0; $i < $ctr; $i++) {
    echo $array[0][$i];
}

循环应在到达数组末尾后结束。