改变价值时的奇怪行为

时间:2015-08-30 16:27:17

标签: php

使用此片段缓冲事件。

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 }

我在做错的地方?

1 个答案:

答案 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;
}