PHP has a wealth of functions for manipulating arrays, however; I often want to deep merge 2 arrays whilst maintaining the key => value structure. PHP does have functions that will merge multiple arrays but they attempt to maintain duplicate keys.
The below function take 2 arguments (arrays). Arguments are in order of importance, the second arguments values will always overwrite the first arguments values and so on.
function array_merge_replace($base_array, $merge_array){ $new_array = array(); $key_list = array_merge((array)$base_array, (array)$merge_array); foreach($key_list as $k=>$v){ if(is_array($base_array[$k])||is_array($merge_array[$k])){ $new_array[$k] = array_merge_replace($base_array[$k], $merge_array[$k]); }else{ $new_array[$k] = $merge_array[$k] ? $merge_array[$k] : $base_array[$k]; } } return $new_array; }
Partizanas | June 14, 2010 at 11:42 pm
Dude! Have you tested this? Next time use phpUnit or smth…
This is a littel correction:
function array_deep_merge($base_array, $merge_array)
{
$result = array();
$result = array_merge((array)$base_array, (array)$merge_array);
foreach($result as $k => $v)
{
if(isset($base_array[$k]) && is_array($base_array[$k]) && isset($merge_array[$k]))
{
$result[$k] = array_deep_merge($base_array[$k], $merge_array[$k]);
}
elseif(isset($merge_array[$k]) && is_array($merge_array[$k]) && isset($base_array[$k]))
{
$result[$k] = array_deep_merge($base_array[$k], $merge_array[$k]);
}
}
return $result;
}
WP Themes | August 2, 2010 at 10:06 pm
Genial fill someone in on and this enter helped me alot in my college assignement. Thank you on your information.