public function arrayMergeRecursiveReplace() {
         // Holds all the arrays passed
            $params =  func_get_args();

            // First array is used as the base, everything else overwrites on it
            $return = array_shift($params);

            // Merge all arrays on the first array
            foreach ($params as $array) {
                foreach ($array as $key => $value) {
                    // Numeric keyed values are added (unless already there)
                    if (is_numeric($key) && (!in_array($value, $return))) {
                        if (Arrays::is($value)) {
                            $return[] = $this->arrayMergeRecursiveReplace($return[$key], $value);
                        } else {
                            $return[] = $value;
                        }
                        // String keyed values are replaced
                    } else {
                        if (isset($return[$key]) && Arrays::is($value) && Arrays::is($return[$key])) {
                            $return[$key] = $this->arrayMergeRecursiveReplace($return[$key], $value);
                        } else {
                            $return[$key] = $value;
                        }
                    }
                }
            }

            return $return;
        }