Created
November 9, 2017 10:12
-
-
Save KaiCMueller/4afbbc4e72568cfea46e917d7d2966ca to your computer and use it in GitHub Desktop.
Merging two multi dimensional arrays, overwriting existing values
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* array_merge_recursive does indeed merge arrays, but it converts values with duplicate | |
* keys to arrays rather than overwriting the value in the first array with the duplicate | |
* value in the second array, as array_merge does. I.e., with array_merge_recursive, | |
* this happens (documented behavior): | |
* | |
* array_merge_recursive(array('key' => 'org value'), array('key' => 'new value')); | |
* => array('key' => array('org value', 'new value')); | |
* | |
* array_merge_recursive_distinct does not change the datatypes of the values in the arrays. | |
* Matching keys' values in the second array overwrite those in the first array, as is the | |
* case with array_merge, i.e.: | |
* | |
* array_merge_recursive_distinct(array('key' => 'org value'), array('key' => 'new value')); | |
* => array('key' => array('new value')); | |
* | |
* Parameters are passed by reference, though only for performance reasons. They're not | |
* altered by this function. | |
* | |
* @author Daniel <daniel (at) danielsmedegaardbuus (dot) dk> | |
* @author Gabriel Sobrinho <gabriel (dot) sobrinho (at) gmail (dot) com> | |
* | |
* @param array $array1 | |
* @param array $array2 | |
* | |
* @return array | |
*/ | |
protected function array_merge_recursive_distinct(array &$array1, array &$array2) | |
{ | |
$merged = $array1; | |
foreach ($array2 as $key => &$value) { | |
if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) { | |
$merged[$key] = $this->array_merge_recursive_distinct($merged[$key], $value); | |
} else { | |
$merged[$key] = $value; | |
} | |
} | |
return $merged; | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment