&$value) { $merged[$key] = self::mergeRecursiveValue($merged, $key, $value); } return $merged; } /** * Process the value in an mergeRecursiveDistinct - make a recursive * call if needed. */ protected static function mergeRecursiveValue(&$merged, $key, $value) { if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) { return self::mergeRecursiveDistinct($merged[$key], $value); } return $value; } /** * Fills all of the leaf-node values of a nested array with the * provided replacement value. */ public static function fillRecursive(array $data, $fill) { $result = []; foreach ($data as $key => $value) { $result[$key] = $fill; if (self::isAssociative($value)) { $result[$key] = self::fillRecursive($value, $fill); } } return $result; } /** * Return true if the provided parameter is an array, and at least * one key is non-numeric. */ public static function isAssociative($testArray) { if (!is_array($testArray)) { return false; } foreach (array_keys($testArray) as $key) { if (!is_numeric($key)) { return true; } } return false; } }