for()循环无法停止循环?

时间:2014-04-08 11:35:46

标签: php for-loop

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

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

有什么想法吗?

4 个答案:

答案 0 :(得分:0)

循环时应该使用数组长度...或者尝试这样做:

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

答案 1 :(得分:0)

它抛出错误的原因是因为不存在的数组索引不等于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];
}

循环应在到达数组末尾后完成。

答案 2 :(得分:0)

真的很有道理。 PHP无法神奇地知道下一个id(在你的例子中,索引号&#39; 3&#39;)没有设置,它必须访问变量来确定。这也是你收到通知的原因。

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

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

答案 3 :(得分:0)

可能替代您应该实际工作的代码。

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++;
}