You are here

function icon_array_merge_recursive in Icon API 8

Same name and namespace in other branches
  1. 7 includes/utilities.inc \icon_array_merge_recursive()

Icon API's custom implementation of array_merge_recursive_distinct.

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' => 'new value',
);

Parameters are passed by reference, though only for performance reasons. They're not altered by this function.

@author daniel@danielsmedegaardbuus.dk

Parameters

array $array1: Base array.

array $array2: Additional array.

Return value

array The merged array.

1 call to icon_array_merge_recursive()
icon_bundle_configure_form_submit in includes/admin.inc
Submit callback for 'icon_bundle_configure_form'.

File

includes/utilities.inc, line 103
utilities.inc Provides useful functions and common tasks.

Code

function &icon_array_merge_recursive(array &$array1, &$array2 = NULL) {
  $merged = $array1;
  if (is_array($array2)) {
    foreach ($array2 as $key => $val) {
      if (is_array($array2[$key])) {
        $merged[$key] = isset($merged[$key]) && is_array($merged[$key]) ? icon_array_merge_recursive($merged[$key], $array2[$key]) : $array2[$key];
      }
      else {
        $merged[$key] = $val;
      }
    }
  }
  return $merged;
}