php在更改值时的奇怪行为
将此代码段用于缓冲事件php在更改值时的奇怪行为,php,Php,将此代码段用于缓冲事件 $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 da
$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.
}
}
结果:
$temp[0] = { date: '2015-07-03'}
$temp[1] = { date: '2015-07-03'}
$temp[2] = { date: '2015-07-03'}
我犯错误的地方???您一直在覆盖对象中该日期的值。由于该数组具有相同的值,因此它们都返回相同的值 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; } 对于($i=0;$i<$row->add_day;$i++) { $d->修改(“+1天”); //在这里,您不断更新对象以获得新日期 $row->date=$d->格式('Y-m-d'); $temp[]=$row; } 这些对象是解决此问题的一种方法: for ($i = 0; $i < $row->add_day; $i++) { $d->modify('+1 day'); $tempObj = clone $row; $tempObj->date = $d->format('Y-m-d'); $temp[] = $tempObj; } 对于($i=0;$i<$row->add_day;$i++) { $d->修改(“+1天”); $tempObj=克隆$row; $tempObj->date=$d->format('Y-m-d'); $temp[]=$tempObj; } for ($i = 0; $i < $row->add_day; $i++) { $d->modify('+1 day'); $tempObj = clone $row; $tempObj->date = $d->format('Y-m-d'); $temp[] = $tempObj; }