php strange behavior while changing value -
having snippet buffering events.
$temp = array(); while ($row = $source) { $temp[] = $row; // `add_day` means how many of next days add buffer $d = new datetime($row->date); ($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. } }
while tracking single event, seems fine. in result - $temp
array, rows forcycle have same date
value. (the last one.)
e.g.
$data = { date: '2015-07-01', add_day: 2 }
result:
$temp[0] = { date: '2015-07-03'} $temp[1] = { date: '2015-07-03'} $temp[2] = { date: '2015-07-03'}
where doing mistake??
you keep overwriting value date in object. since array has references same object return same value.
for ($i = 0; $i < $row->add_day; $i++) { $d->modify('+1 day'); // here keep updating object have new date $row->date = $d->format('y-m-d'); $temp[] = $row; }
cloning objects 1 way work around this:
for ($i = 0; $i < $row->add_day; $i++) { $d->modify('+1 day'); $tempobj = clone $row; $tempobj->date = $d->format('y-m-d'); $temp[] = $tempobj; }
Comments
Post a Comment