diff --git a/classes/Kohana/Arr.php b/classes/Kohana/Arr.php index 49402d680..4ab71cca2 100644 --- a/classes/Kohana/Arr.php +++ b/classes/Kohana/Arr.php @@ -659,5 +659,43 @@ public static function count($array, $recursive = FALSE) array(":type" => Debug::type($array)) ); } + + /** + * Converts a multi-dimensial array to a single-dimensional array with keys converted + * to dot separated paths. + * + * $array = array('set' => array('one' => 'something'), 'two' => 'other'); + * + * // Flatten the array + * $array = Arr::get_paths($array); + * + * // The array will now be + * array('set.one' => 'something', 'two' => 'other'); + * + * + * @param array $array array to get paths from + * @param string $parent parent key + * @param array $delimiter delimiter for paths "." is default. + * @return array + */ + public static function get_paths($array, $parent = '', $delimiter = NULL){ + if ( ! $delimiter) + { + $delimiter = Arr::$delimiter; + } + + $paths = array(); + foreach($array as $key => $val) + { + $parent_path = (!empty($parent)) ? $parent.$delimiter.$key : $key; + if(Arr::is_array($val)) + { + $paths = array_merge($paths, Arr::get_paths($val, $parent_path)); + }else{ + $paths[$parent_path] = $val; + } + } + return $paths; + } } diff --git a/classes/Kohana/Validation.php b/classes/Kohana/Validation.php index 24f684e30..a5bc98a24 100644 --- a/classes/Kohana/Validation.php +++ b/classes/Kohana/Validation.php @@ -48,7 +48,7 @@ public static function factory(array $array) */ public function __construct(array $array) { - $this->_data = $array; + $this->_data = array_merge($array, Arr::get_paths($array)); } /**