我有一个带有嵌套foreach循环的while循环,在第一个while循环运行后,foreach循环内的数组未被设置(或者至少不再是一个数组)。
我前往的是一个条形图数据数组,它显示自开始日期以来的每一天以及每天按类型(8种类型)点击的次数。所以我计算从开始日期到现在的天数,并且每天检查第一个数组以查看当天有多少(如果有)以及有哪些类型的点击。
这是相关的代码......
$i=0;
while($i<=$numdays)
{
echo $date2->format('Y-m-d') . "<br>";
foreach($clicklist as $key => $clicklist) {
if ( $clicklist[clickdate] === $date2 ) {
echo $clicklist[clicks]." clicks on ".$clicklist[type]." on that date<br>";
}
}
$date2->modify('+1 day');
$i++;
echo is_array($clicklist) ? 'Array<br>' : 'not an Array<br>';
}
$ numdays是从startdate到现在的天数(其中一个图表变量需要,$ date2是startdate,$ clicklist是db中的点击/日期/类型数组。所有随机回声都是只是这样我才能看到发生了什么 - 或者不是视情况而定。
while循环工作正常是隔离,foreach循环也可以在while循环之外正常工作(使用静态日期代替变量),但当然这只是一次运行。
从手册中,foreach会自动将指针重置为开头,这不是问题。
我遗漏了一些明显的东西我确定......任何指导都非常感激。
答案 0 :(得分:2)
foreach($clicklist as $key => $clicklist)
你的问题出在哪里。不要重复使用该名称,将其更改为
等内容foreach($clicklist as $key => $cl)
否则在循环结束时,$ clicklist将被覆盖为迭代的最后一个元素。
修改:在相关说明中,避免在没有引号的情况下访问您的数组,例如在$clicklist[clickdate]
中。如果您遇到使用相同名称定义的常量,则此后可能会变成错误。请改用$clicklist['clickdate']
。