使用此片段缓冲事件。
and
在跟踪单个事件时,一切似乎都很好。但是在结果 - $temp = array();
while ($row = $source)
{
$temp[] = $row;
// `add_day` means how many of next days add to buffer
$d = new DateTime($row->date);
for ($i = 0; $i < $row->add_day; $i++)
{
$d->modify('+1 day');
$row->date = $d->format('Y-m-d');
$temp[] = $row;
// print_r($row) --> It's OK. `date` has proper value.
}
}
数组中,来自forcycle的所有行都具有相同的$temp
值。 (最后一个。)
E.G。
date
结果:
$data = { date: '2015-07-01', add_day: 2 }
我在做错的地方?
答案 0 :(得分:3)
您将继续覆盖对象中该日期的值。由于该数组具有references to the same object,因此它们都返回相同的值。
for ($i = 0; $i < $row->add_day; $i++) { $d->modify('+1 day'); // Here you keep updating your object to have the new date $row->date = $d->format('Y-m-d'); $temp[] = $row; }
Cloning这些对象是解决此问题的一种方法:
for ($i = 0; $i < $row->add_day; $i++) { $d->modify('+1 day'); $tempObj = clone $row; $tempObj->date = $d->format('Y-m-d'); $temp[] = $tempObj; }