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). > > -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. -- 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]