diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc index e5de2d1..6dc5df2 100644 --- a/includes/bootstrap.inc +++ b/includes/bootstrap.inc @@ -2117,22 +2117,31 @@ function drupal_array_merge_deep() { * - call_user_func_array('drupal_array_merge_deep', $arrays_to_merge); * - drupal_array_merge_deep_array($arrays_to_merge); * + * @param array $arrays + * An arrays of arrays to merge. + * @param bool $preserve_integer_keys + * (optional) If given, integer keys will be preserved and merged instead of + * appended. Defaults to FALSE. + * + * @return array + * The merged array. + * * @see drupal_array_merge_deep() */ -function drupal_array_merge_deep_array($arrays) { +function drupal_array_merge_deep_array($arrays, $preserve_integer_keys = FALSE) { $result = array(); foreach ($arrays as $array) { foreach ($array as $key => $value) { - // Renumber integer keys as array_merge_recursive() does. Note that PHP - // automatically converts array keys that are integer strings (e.g., '1') - // to integers. - if (is_integer($key)) { + // Renumber integer keys as array_merge_recursive() does unless + // $preserve_integer_keys is set to TRUE. Note that PHP automatically + // converts array keys that are integer strings (e.g., '1') to integers. + if (is_integer($key) && !$preserve_integer_keys) { $result[] = $value; } // Recurse when both values are arrays. elseif (isset($result[$key]) && is_array($result[$key]) && is_array($value)) { - $result[$key] = drupal_array_merge_deep_array(array($result[$key], $value)); + $result[$key] = drupal_array_merge_deep_array(array($result[$key], $value), $preserve_integer_keys); } // Otherwise, use the latter value, overriding any previous value. else {