array_merge is useful - but with a caveat
October 7th, 2008 by Aaron
So, the other day, I saw a horrible thing. I saw two PHP associative arrays that needed to be combined into one, and the worst example of NOT using PHP’s built in functions to combine them. They weren’t using array_merge - instead they were looping through each value.
That’s what I thought until I did some testing. There is a legitimate difference in the looping method vs the array_merge method. This could be by design in your application, so don’t get over-eager optimizing. Lets take a look:
Example Arrays
1 2 | $ar1 = array('a'=>'ay', 'b'=>'bee', 'c'=>'see'); $ar2 = array('d'=>'dee', 'e'=>'ee', 'f'=>'ef'); |
Well, first off, lets try my way - with array_merge:
1 2 | $ar2 = array_merge($ar1, $ar2); var_dump($ar2); |
array(6) { ["a"]=> string(2) "ay" ["b"]=> string(3) "bee"
["c"]=> string(3) "see" ["d"]=> string(3) "dee"
["e"]=> string(2) "ee" ["f"]=> string(2) "ef" }
Ok - decent. Now lets try it their way:
1 2 3 4 | foreach ($ar1 as $k=>$v) { $ar2[$k]=$v; } var_dump($ar2); |
array(6) { ["d"]=> string(3) "dee" ["e"]=> string(2) "ee"
["f"]=> string(2) "ef" ["a"]=> string(2) "ay"
["b"]=> string(3) "bee" ["c"]=> string(3) "see" }
The array is in a different order.
Special Thanks to Sjan and James for commenting on my original version of this story and explaining that I was totally running in circles!
Tags: PHP
This entry was posted on Tuesday, October 7th, 2008 at 2:58 pm and is filed under PHP. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.















October 7th, 2008 at 3:05 pm
Or, by changing the merge order from
$ar2 = array_merge($ar1, $ar2);
to
$ar2 = array_merge($ar2, $ar1);
you can come up with the same result.
October 7th, 2008 at 3:07 pm
From the PHP docs:
“Merges the elements of one or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array. ”
So, if you want the second array first, why wouldn’t you just do array_merge($ar2, $ar1)?
October 7th, 2008 at 3:34 pm
Thanks guys for the comments! What you suggested would also get the desired effect.