From 29d9192cb3c5a170dd1ee4053ce5eda45fa08698 Mon Sep 17 00:00:00 2001 From: Tom McDonald Date: Mon, 25 Nov 2013 13:55:10 -0500 Subject: [PATCH 1/2] Write test cases for issue #4743 --- tests/kohana/ArrTest.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/kohana/ArrTest.php b/tests/kohana/ArrTest.php index 150016f1a..2d3cf0dff 100644 --- a/tests/kohana/ArrTest.php +++ b/tests/kohana/ArrTest.php @@ -414,6 +414,11 @@ public function provider_path() 3 => 'frank', // Issue #3194 ), 'object' => new ArrayObject(array('iterator' => TRUE)), // Iterable object should work exactly the same + 'named_users' => array( // Issue #4743 + 'matt' => array('name' => 'matty matt'), + 'john' => array('name' => 'johnny boy', 'interests' => array('hocky' => array('length' => 2), 'football' => array())), + 'frank' => 'frank', + ), ); return array( @@ -435,14 +440,21 @@ public function provider_path() // Test that a wildcard returns the entire array at that "level" array($array['users'], $array, 'users.*'), // Now we check that keys after a wilcard will be processed - array(array(0 => array(0 => 2)), $array, 'users.*.interests.*.length'), + // Fixed to check associative array indexes (issue #4743) + array(array(2 => array('hocky' => 2)), $array, 'users.*.interests.*.length'), // See what happens when it can't dig any deeper from a wildcard array(NULL, $array, 'users.*.fans'), // Starting wildcards, issue #3269 - array(array('matt', 'john'), $array['users'], '*.name'), + // Fixed to check associative array indexes (issue #4743) + array(array(1 => 'matt', 2 => 'john'), $array['users'], '*.name'), // Path as array, issue #3260 array($array['users'][2]['name'], $array, array('users', 2, 'name')), array($array['object']['iterator'], $array, 'object.iterator'), + // Wildcards with associative keys, issue #4743 + array(array('matt' => 'matty matt', 'john' => 'johnny boy'), $array, 'named_users.*.name'), + array(array(2 => array('hocky' => 2)), $array, 'users.*.interests.*.length'), + array(array('matt' => 'matty matt', 'john' => 'johnny boy'), $array['named_users'], '*.name'), + array(NULL, $array, 'named_users.*.hat_color'), ); } From 4fc56cd1c4b7a8af83f5db08bb90e879a383a799 Mon Sep 17 00:00:00 2001 From: Tom McDonald Date: Mon, 25 Nov 2013 14:16:57 -0500 Subject: [PATCH 2/2] Return assoc array for wildcard in Arr::path() --- classes/Kohana/Arr.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/Kohana/Arr.php b/classes/Kohana/Arr.php index 1dbefd805..2fe71070a 100644 --- a/classes/Kohana/Arr.php +++ b/classes/Kohana/Arr.php @@ -159,11 +159,11 @@ public static function path($array, $path, $default = NULL, $delimiter = NULL) // Handle wildcards $values = array(); - foreach ($array as $arr) + foreach ($array as $wildcard_key => $arr) { if ($value = Arr::path($arr, implode('.', $keys))) { - $values[] = $value; + $values[$wildcard_key] = $value; } }