Sterling Hughes wrote:
>>Sterling Hughes wrote:
>>
>>
>>>>Hmm sounds a bit weird to me but if it's really useful than it's OK :)
>>>>
>>>>
>>>>
>>> I have to agree, and its really not that hard to implement in user
>>> space::
>>>
>>> function count_recursive($ar) {
>>> $total = 0;
>>>
>>> foreach ($ar as $e => $val) {
>>> if (is_array($val)) {
>>> $total += count_recursive($val);
>>> }
>>> else {
>>> $total++;
>>> }
>>> }
>>>
>>> return $total;
>>> }
>>>
>>> To me its seems like YACFA (Yet another confusing function
>>> argument).
Forgot to read this line :)
PECL array module?
>>>
>>> -Sterling
>>>
>>>
>>
>>It's not hard, but it could be very *slow*...
>>Loop and function call in PHP script is slow in general :)
>>Since it's a O(n), so it may be okay to be slow, though.
>>
>>
>
> Well, yeah, but then let's just make PHP a templating engine and
> write all our logic in C & C++!! PHP has evolved to the point where
> I think its ok to code a majority of the business logic in PHP
> instead of C.
>
> A performance critical script wouldn't do a recursive count anyhow,
> it just wouldn't make sense.
>
> -Sterling
I agree.
However some users want to count huge array with PHP.
I cannot believe there are users use more than 100MB
array, but there are.
Anyway, I would like to see better performance
for loops by default. (performance with ZendOptimizer)
It helps array operations a lot.
I vote 0 for this function ;)
--
Yasuo Ohgaki
>
>
>>--
>>Yasuo Ohgaki
>>
>>
>>>>Andi
>>>>
>>>>
>>>>At 06:54 PM 1/9/2002 +0100, [EMAIL PROTECTED] wrote:
>>>>
>>>>
>>>>>On Wed, 9 Jan 2002, Andi Gutmans wrote:
>>>>>
>>>>>
>>>>>
>>>>>>Why is this useful?
>>>>>>
>>>>>>
>>>>>To count the nodes in a tree:
>>>>>
>>>>>$ar = array (
>>>>> "child1" => array ("child2", "child3", "child4"),
>>>>> "child5" => array ("child6", "child7", "child8")
>>>>> );
>>>>>
>>>>>(maybe a louzy example, but you should get the idea :)
>>>>>
>>>>>Derick
>>>>>
>>>>>
>>>>>
>>>>>>At 06:50 PM 1/9/2002 +0100, [EMAIL PROTECTED] wrote:
>>>>>>
>>>>>>
>>>>>>>On Wed, 9 Jan 2002, Andi Gutmans wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>Was this in 4.1.1?
>>>>>>>>
>>>>>>>>
>>>>>>>No, only on the 4.2.0 branch.
>>>>>>>
>>>>>>>Derick
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>At 06:49 PM 1/9/2002 +0100, [EMAIL PROTECTED] wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>>On Wed, 9 Jan 2002, Andi Gutmans wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>Isn't this the function we decided to nuke?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>Nope, that was is_array_multidimensional(). I'll check if it's
>>>>>>>>>
>>>>>>>>>
>>>>>nuked, is
>>>>>
>>>>>
>>>>>>>>>not, I'll nuke it.
>>>>>>>>>
>>>>>>>>>Derick
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>Andi
>>>>>>>>>>
>>>>>>>>>>At 04:03 PM 1/9/2002 +0000, Derick Rethans wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>derick Wed Jan 9 11:03:36 2002 EDT
>>>>>>>>>>>
>>>>>>>>>>>Modified files:
>>>>>>>>>>> /php4/ext/standard array.c
>>>>>>>>>>> /php4/ext/standard/tests/array count_recursive.phpt
>>>>>>>>>>>Log:
>>>>>>>>>>>- Fix bug introduced in earlier patch
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>Index: php4/ext/standard/array.c
>>>>>>>>>>>diff -u php4/ext/standard/array.c:1.151
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>php4/ext/standard/array.c:1.152
>>>>>>>
>>>>>>>
>>>>>>>>>>>--- php4/ext/standard/array.c:1.151 Sat Dec 29 15:59:59 2001
>>>>>>>>>>>+++ php4/ext/standard/array.c Wed Jan 9 11:03:34 2002
>>>>>>>>>>>@@ -21,7 +21,7 @@
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>+----------------------------------------------------------------------+
>>>>>
>>>>>
>>>>>>>>>>>*/
>>>>>>>>>>>
>>>>>>>>>>>-/* $Id: array.c,v 1.151 2001/12/29 20:59:59 derick Exp $ */
>>>>>>>>>>>+/* $Id: array.c,v 1.152 2002/01/09 16:03:34 derick Exp $ */
>>>>>>>>>>>
>>>>>>>>>>>#include "php.h"
>>>>>>>>>>>#include "php_ini.h"
>>>>>>>>>>>@@ -260,11 +260,16 @@
>>>>>>>>>>> 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;
>>>>>>>>>>> }
>>>>>>>>>>>}
>>>>>>>>>>>/* }}} */
>>>>>>>>>>>Index: php4/ext/standard/tests/array/count_recursive.phpt
>>>>>>>>>>>diff -u php4/ext/standard/tests/array/count_recursive.phpt:1.1
>>>>>>>>>>>php4/ext/standard/tests/array/count_recursive.phpt:1.2
>>>>>>>>>>>---
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>php4/ext/standard/tests/array/count_recursive.phpt:1.1 Sat Dec 29
>>>>>>>
>>>>>>>
>>>>>>>>>>>16:05:03 2001
>>>>>>>>>>>+++ php4/ext/standard/tests/array/count_recursive.phpt Wed Jan
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>9
>>>>>
>>>>>
>>>>>>>>>>>11:03:36 2002
>>>>>>>>>>>@@ -4,6 +4,11 @@
>>>>>>>>>>>--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 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
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>--
>>>>>>>>>>>PHP CVS Mailing List (http://www.php.net/)
>>>>>>>>>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>>To contact the list administrators, e-mail:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>[EMAIL PROTECTED]
>>>>>>>
>>>>>>>
>>>>>>>>>>--
>>>>>>>>>>PHP CVS Mailing List (http://www.php.net/)
>>>>>>>>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>To contact the list administrators, e-mail:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>[EMAIL PROTECTED]
>>>>>>>
>>>>>>>
>>>>>>>--
>>>>>>>PHP CVS Mailing List (http://www.php.net/)
>>>>>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>To contact the list administrators, e-mail:
>>>>>>>[EMAIL PROTECTED]
>>>>>>>
>>>>>>>
>>>>>--
>>>>>PHP CVS Mailing List (http://www.php.net/)
>>>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>To contact the list administrators, e-mail: [EMAIL PROTECTED]
>>>>>
>>>>>
>>>>--
>>>>PHP CVS Mailing List (http://www.php.net/)
>>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>>To contact the list administrators, e-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>>>
>>
>>--
>>PHP Development Mailing List <http://www.php.net/>
>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>For additional commands, e-mail: [EMAIL PROTECTED]
>>To contact the list administrators, e-mail: [EMAIL PROTECTED]
>>
>>
--
Yasuo Ohgaki
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]