diff --git a/lib/Cake/Test/Case/Utility/HashTest.php b/lib/Cake/Test/Case/Utility/HashTest.php index f85ac6a86..96476315a 100644 --- a/lib/Cake/Test/Case/Utility/HashTest.php +++ b/lib/Cake/Test/Case/Utility/HashTest.php @@ -868,10 +868,19 @@ class HashTest extends CakeTestCase { 'active' => false ), ); + $result = Hash::extract($users, '{n}[active=0]'); + $this->assertCount(1, $result); + $this->assertEquals($users[2], $result[0]); + $result = Hash::extract($users, '{n}[active=false]'); $this->assertCount(1, $result); $this->assertEquals($users[2], $result[0]); + $result = Hash::extract($users, '{n}[active=1]'); + $this->assertCount(2, $result); + $this->assertEquals($users[0], $result[0]); + $this->assertEquals($users[1], $result[1]); + $result = Hash::extract($users, '{n}[active=true]'); $this->assertCount(2, $result); $this->assertEquals($users[0], $result[0]); diff --git a/lib/Cake/Utility/Hash.php b/lib/Cake/Utility/Hash.php index 57531bcc3..359311a12 100644 --- a/lib/Cake/Utility/Hash.php +++ b/lib/Cake/Utility/Hash.php @@ -208,7 +208,10 @@ class Hash { if (isset($data[$attr])) { $prop = $data[$attr]; } - if ($prop === true || $prop === false) { + $isBool = is_bool($prop); + if ($isBool && is_numeric($val)) { + $prop = $prop ? '1' : '0'; + } elseif ($isBool) { $prop = $prop ? 'true' : 'false'; }