code
<?php
$old_long_arr[2001]=array(
array('old01AA','old01AB'),
array('old01BA','old01BB'),
);
$old_long_arr[2002]=array(
array('old02AA','old02AB'),
array('old02BA','old02BB'),
);
$old_long_arr[2003]=array(
array('old03AA','old03AB'),
array('old03BA','old03BB'),
);
$old_long_arr[2004]=array(
array('old04AA','old04AB'),
array('old04BA','old04BB'),
);
$old_long_arr[2005]=array(
array('old05AA','old05AB'),
array('old05BA','old05BB'),
);
$old_long_arr[2006]=array(
array('old06AA','old06AB'),
array('old06BA','old06BB'),
);
$old_long_arr[2007]=array(
array('old07AA','old07AB'),
array('old07BA','old07BB'),
);
$old_long_arr[2008]=array(
array('old08AA','old08AB'),
array('old08BA','old08BB'),
);
$old_long_arr[2009]=array(
array('old09AA','old09AB'),
array('old09BA','old09BB'),
);
$old_long_arr[2010]=array(
array('old10AA','old10AB'),
array('old10BA','old10BB'),
);
$old_long_arr[2011]=array(
array('old11AA','old11AB'),
array('old11BA','old11BB'),
);
$old_long_arr[2012]=array(
array('old12AA','old12AB'),
array('old12BA','old12BB'),
);
$new_short_arr[2001]=array(
array('new01AA','new01AB'),
array('new01BA','new01BB'),
);
$new_short_arr[2006]=array(
array('new06AA','new06AB'),
array('new06BA','new06BB'),
);
$new_short_arr[2011]=array(
array('new11AA','new11AB'),
array('new11BA','new11BB'),
);
foreach ($new_short_arr as $ind => $new_prog_arr) {
echo "working ind:$ind\n";
$this_arr=&$old_long_arr[$ind];
array_splice($this_arr,0);
for ($j=0;$j<count($new_prog_arr);$j++) {
array_push($this_arr,array($new_prog_arr[$j][0],$new_prog_arr[$j][1]));
}
}
foreach ($old_long_arr as $ind => $prog_arr) {
$this_arr=$old_long_arr[$ind];
echo "$ind " . $this_arr[0][1] . "\n";
}
?>
output:
working ind:2001
working ind:2006
working ind:2011
2001 new01AB
2002 old02AB
2003 old03AB
2004 old04AB
2005 old05AB
2006 new06AB
2007 old07AB
2008 old08AB
2009 old09AB
2010 old10AB
2011 old10AB
2012 old12AB
I am inserting elements in a new multi-dimensional array into an old one. Notice [2011]; its output is "old10AB", not "new11AB". I can tell the $this_arr variable is first assigned to "&$old_long_arr[2011]" memory address (after it exits from the first foreach block) and in the second foreach $this_arr is assigned with content of the array. But the behavior is weird. Shouldn't php generate some warning at least?