Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / vendor / consolidation / config / src / Util / ArrayUtil.php
index a23f854e8692039e5ab988c004d39913afd86054..d5748a7a2a88ca5dd03b663af93315f9cdc464fe 100644 (file)
@@ -40,6 +40,53 @@ class ArrayUtil
         return $value;
     }
 
+
+    /**
+     * Merges arrays recursively while preserving.
+     *
+     * @param array $array1
+     * @param array $array2
+     *
+     * @return array
+     *
+     * @see http://php.net/manual/en/function.array-merge-recursive.php#92195
+     * @see https://github.com/grasmash/bolt/blob/robo-rebase/src/Robo/Common/ArrayManipulator.php#L22
+     */
+    public static function mergeRecursiveSelect(
+        array &$array1,
+        array &$array2,
+        array $selectionList,
+        $keyPrefix = ''
+    ) {
+        $merged = $array1;
+        foreach ($array2 as $key => &$value) {
+            $merged[$key] = self::mergeRecursiveSelectValue($merged, $key, $value, $selectionList, $keyPrefix);
+        }
+        return $merged;
+    }
+
+    /**
+     * Process the value in an mergeRecursiveDistinct - make a recursive
+     * call if needed.
+     */
+    protected static function mergeRecursiveSelectValue(&$merged, $key, $value, $selectionList, $keyPrefix)
+    {
+        if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) {
+            if (self::selectMerge($keyPrefix, $key, $selectionList)) {
+                return array_merge_recursive($merged[$key], $value);
+            } else {
+                return self::mergeRecursiveSelect($merged[$key], $value, $selectionList, "${keyPrefix}${key}.");
+            }
+        }
+        return $value;
+    }
+
+    protected static function selectMerge($keyPrefix, $key, $selectionList)
+    {
+        return in_array("${keyPrefix}${key}", $selectionList);
+    }
+
+
     /**
      * Fills all of the leaf-node values of a nested array with the
      * provided replacement value.