1

我有一个带有嵌套 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 是从开始日期到现在的天数(图表变量之一需要,$date2 是开始日期,$clicklist 是来自数据库的点击次数/日期/类型的数组。所有随机回声都是如此可以看到发生了什么 - 或不是视情况而定。

while 循环工作正常是隔离,foreach 循环在 while 循环之外也能正常工作(使用静态日期代替变量),但当然这只是一次运行。

从手册中,foreach 会自动将指针重置回开始,所以这不是问题。

我肯定错过了一些明显的东西。非常感谢任何指导。

4

1 回答 1

2
foreach($clicklist as $key => $clicklist)

是你的问题所在。不要重复使用名称,将其更改为诸如

foreach($clicklist as $key => $cl)

否则在循环结束时, $clicklist 将被覆盖为最后一个迭代的元素。


编辑:在相关说明中,避免访问不带引号的数组,例如 in $clicklist[clickdate]。如果您遇到使用相同名称定义的常量,这可能会在以后变成错误。改为使用$clicklist['clickdate']

于 2013-06-28T04:44:55.217 回答