Deep merging two arrays in PHP

February 4th, 2010 | Posted in PHP

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;
}

2 Responses to “Deep merging two arrays in PHP”

  1. 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;
    }

  2. 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.

Leave a Reply

© 2006 - 2010 Matt Lowden. Creative Commons all rights reserved.