Browse Source

Fix check for deep nested values.

ADmad 10 years ago
parent
commit
bf03f8e9d8
2 changed files with 5 additions and 1 deletions
  1. 2 1
      src/Utility/Hash.php
  2. 3 0
      tests/TestCase/Utility/HashTest.php

+ 2 - 1
src/Utility/Hash.php

@@ -13,6 +13,7 @@
  */
 namespace Cake\Utility;
 
+use ArrayAccess;
 use InvalidArgumentException;
 use RuntimeException;
 
@@ -71,7 +72,7 @@ class Hash
                 return isset($data[$parts[0]][$parts[1]][$parts[2]]) ? $data[$parts[0]][$parts[1]][$parts[2]] : $default;
             default:
                 foreach ($parts as $key) {
-                    if (is_array($data) && isset($data[$key])) {
+                    if ((is_array($data) || $data instanceof ArrayAccess) && isset($data[$key])) {
                         $data = $data[$key];
                     } else {
                         return $default;

+ 3 - 0
tests/TestCase/Utility/HashTest.php

@@ -256,6 +256,9 @@ class HashTest extends TestCase
 
         $return = Hash::get($data, 'non-existent');
         $this->assertNull($return);
+
+        $data = ['a' => ['b' => ['c' => ['d' => 1]]]];
+        $this->assertEquals(1, Hash::get(new ArrayObject($data), 'a.b.c.d'));
     }
 
     /**