所以我一直坚持这个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]));
答案 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);