From 166c776099e5c8addcceac94749897367b16c038 Mon Sep 17 00:00:00 2001 From: mark_story Date: Sun, 9 Jan 2011 22:34:36 -0500 Subject: [PATCH] Making Set::filter() only operate on arrays. Also making Set::filter() work properly in a recursive fashion. This matches behavior with other functions in Set. Fixes #1431 --- cake/libs/set.php | 8 ++++---- cake/tests/cases/libs/set.test.php | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/cake/libs/set.php b/cake/libs/set.php index 8d204b18c9c..b16aeb59a17 100644 --- a/cake/libs/set.php +++ b/cake/libs/set.php @@ -61,10 +61,10 @@ public static function merge($arr1, $arr2 = null) { * @param boolean $isArray Force to tell $var is an array when $var is empty * @return mixed Either filtered array, or true/false when in callback */ - public static function filter($var, $isArray = false) { - foreach ((array)$var as $k => $v) { - if (!empty($v) && is_array($v)) { - $var[$k] = array_filter($v, array('Set', '_filter')); + public static function filter(array $var) { + foreach ($var as $k => $v) { + if (is_array($v)) { + $var[$k] = Set::filter($v); } } return array_filter($var, array('Set', '_filter')); diff --git a/cake/tests/cases/libs/set.test.php b/cake/tests/cases/libs/set.test.php index bbd3e581cd6..b974bfe3d6d 100644 --- a/cake/tests/cases/libs/set.test.php +++ b/cake/tests/cases/libs/set.test.php @@ -100,8 +100,15 @@ function testFilter() { $result = Set::filter(array(1, array('empty', false))); $expected = array(1, array('empty')); $this->assertEqual($expected, $result); + + $result = Set::filter(array(1, array('2', false, array(3, null)))); + $expected = array(1, array('2', 2 => array(3))); + $this->assertEqual($expected, $result); + + $this->assertSame(array(), Set::filter(array())); } + /** * testNumericArrayCheck method *