PHP do-while循环不起作用

时间:2012-04-02 09:16:09

标签: php while-loop do-while

所以我一直坚持这个do-while循环不能工作大约两个小时。我真的不明白为什么它不起作用。我收到了这个错误:

Notice: Undefined offset: 9 in /public_html/me/yes.php on line 60

我想到的唯一问题是它不接受while-while中的while循环。

这是我的内部while循环的工作代码:

$maxcols = $numofcols-1; //=9
$maxrow = count($myarray)-1; //=44
$currentcol=0;
    $currentrow=1;
    //do {
    $collection->insert(array($title[$currentcol] => $myarray[$currentrow][$currentcol]));
    $currentcol++;
    while ($currentcol<=$maxcols){
    $newdata = array('$set' => array($title[$currentcol] => $myarray[$currentrow][$currentcol]));
    $currentcol--;
    $collection->update(array($title[$currentcol] => $myarray[$currentrow][$currentcol]), $newdata);
    $currentcol++;
    $currentcol++;

    }
    $currentrow++;

    //} while ($currentrow<=$maxrow);

如果我取消注释两行的“// do {”和“//} while($ currentrow&lt; = $ maxrow);”我的程序因上面提到的错误而死。有什么东西很简单,为什么它会破坏我的代码?提前致谢

更新

第60行是:

$collection->insert(array($title[$currentcol] => $myarray[$currentrow][$currentcol]));

4 个答案:

答案 0 :(得分:1)

内部while循环以[{1}}设置为$currentcol结束。下次到达那里$maxcols增加了一个(在上一行中),因此它是$currentcol,因此while循环不会运行。外部do循环中的下一个循环现在尝试访问未定义的$maxcols+1

答案 1 :(得分:0)

$currentrow初始化为值1。如果你的数组只包含一个元素,那么它有索引0,所以你得到一个“索引越界”错误。

此外,您要确定全局列数(在行的while循环之外)。也许您应该在循环列之前确定每行的列数。

此外,您没有将列索引变量重置为0,只是继续递增。这导致第二行出错,因为您开始使用不存在的列索引。

怀疑PHP在while循环中不允许while循环是无稽之谈。嵌套循环非常频繁使用 - 您只需要正确使用条件

答案 2 :(得分:0)

试试这个:

$maxcols = $numofcols-1; //=9
$maxrow = count($myarray)-1; //=44
$currentcol=0;
$currentrow=1;
do {
    if ($currentcol<9)
    {
         $collection->insert(array($title[$currentcol] => $myarray[$currentrow][$currentcol]));
         $currentcol++;
         while ($currentcol<=$maxcols){
             $newdata = array('$set' => array($title[$currentcol] => $myarray[$currentrow][$currentcol]));
             $currentcol--;
             $collection->update(array($title[$currentcol] => $myarray[$currentrow][$currentcol]), $newdata);
             $currentcol++;
             $currentcol++;
         }
         $currentrow++;
    }

} while ($currentrow<=$maxrow);

答案 3 :(得分:0)

答案:

这么简单的小错误,但$currentcol

没有重置

在do语句的正下方移动初始化使其正常工作。你能告诉它迟到吗?哈哈哈谢谢大家。

$currentrow=1;

do {
$currentcol=0;

$collection->insert(array($title[$currentcol] => $myarray[$currentrow][$currentcol]));
$currentcol++;
while ($currentcol<=$maxcols){
$newdata = array('$set' => array($title[$currentcol] => $myarray[$currentrow][$currentcol]));
$currentcol--;
$collection->update(array($title[$currentcol] => $myarray[$currentrow][$currentcol]), $newdata);
$currentcol++;
$currentcol++;

}
$currentrow++;

} while ($currentrow<=$maxrow);