summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/array.c15
-rw-r--r--ext/standard/tests/array/count_recursive.phpt8
2 files changed, 18 insertions, 5 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 3ce6d17cc0..86331a75e8 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -260,11 +260,16 @@ PHP_FUNCTION(count)
if (zend_parse_parameters (ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &array, &mode) == FAILURE)
return;
- if (Z_TYPE_P(array) == IS_ARRAY) {
- RETURN_LONG (php_count_recursive (array, mode));
- } else {
- /* return 1 for non-array arguments */
- RETURN_LONG(1);
+ switch (Z_TYPE_P(array)) {
+ case IS_NULL:
+ RETURN_LONG(0);
+ break;
+ case IS_ARRAY:
+ RETURN_LONG (php_count_recursive (array, mode));
+ break;
+ default:
+ RETURN_LONG(1);
+ break;
}
}
/* }}} */
diff --git a/ext/standard/tests/array/count_recursive.phpt b/ext/standard/tests/array/count_recursive.phpt
index 6e7d141d81..a6b7ee4afa 100644
--- a/ext/standard/tests/array/count_recursive.phpt
+++ b/ext/standard/tests/array/count_recursive.phpt
@@ -4,6 +4,11 @@ count
--GET--
--FILE--
<?php
+print "Testing NULL...\n";
+$arr = NULL;
+print "COUNT_NORMAL: should be 0, is ".count($arr, COUNT_NORMAL)."\n";
+print "COUNT_RECURSIVE: should be 0, is ".count($arr, COUNT_RECURSIVE)."\n";
+
print "Testing arrays...\n";
$arr = array(1, array(3, 4, array(6, array(8))));
print "COUNT_NORMAL: should be 2, is ".count($arr, COUNT_NORMAL)."\n";
@@ -23,6 +28,9 @@ print "COUNT_NORMAL: should be 1, is ".count("string")."\n";
print "COUNT_NORMAL: should be 2, is ".count(array("a", array("b")))."\n";
?>
--EXPECT--
+Testing NULL...
+COUNT_NORMAL: should be 0, is 0
+COUNT_RECURSIVE: should be 0, is 0
Testing arrays...
COUNT_NORMAL: should be 2, is 2
COUNT_RECURSIVE: should be 8, is 8