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

Popular posts from this blog

c# - Binding a comma separated list to a List<int> in asp.net web api -

Delphi 7 and decode UTF-8 base64 -

html - Is there any way to exclude a single element from the style? (Bootstrap) -