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 {
