2013-06-28 10 views
1

我有一个嵌套的foreach循环的while循环,在第一个while循环运行之后,foreach循环内的数组未被设置(或者至少停止成为一个数组)。嵌套的foreach在一个while循环中,数组并不是一个数组之后第一次

我要去的地方是一个条形图数据数组,每天显示自开始日期以来的每一天以及按类型(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会自动将指针重置为开始,所以这不是问题。

我失去了一些明显的东西我敢肯定..任何指导非常感谢。

回答

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

是你的问题所在。不要重复使用的名称,否则你的循环结束改变它作为

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

这样的东西,$ clicklist将被改写为被迭代的最后一个元素。


编辑:在一个相关的说明,避免访问您的阵列时没有引号,如$clicklist[clickdate]。如果你遇到一个用同一个名字定义的常量,那么以后可能会变成一个bug。改为使用$clicklist['clickdate']

+0

感谢和感谢亚瑟,答案的窍门和编辑是一个好点 - 将做。 – Craig

相关问题