嵌套的foreach在while循环中,数组在第一次之后不是数组

时间:2013-06-28 04:41:27

标签: php

我有一个带有嵌套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会自动将指针重置为开头,这不是问题。

我遗漏了一些明显的东西我确定......任何指导都非常感激。

1 个答案:

答案 0 :(得分:2)

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

你的问题出在哪里。不要重复使用该名称,将其更改为

等内容
foreach($clicklist as $key => $cl)

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


修改:在相关说明中,避免在没有引号的情况下访问您的数组,例如在$clicklist[clickdate]中。如果您遇到使用相同名称定义的常量,则此后可能会变成错误。请改用$clicklist['clickdate']