I have test some of these out, but count(recursive) doesn't give the depth of an array
Joey On Fri, May 18, 2012 at 5:11 PM, Anthony Ferrara <ircmax...@gmail.com>wrote: > Except that doesn't do what you think it does... > > $a = [[[1,2]]]; > > The depth here is clearly 3. > > But count($a, COUNT_RECURSIVE); gives 4: http://codepad.viper-7.com/7xPYCu > > It counts the total number of elements in the array, and any child > arrays (including the child array)... > > Also: constants exist for a reason. I'd suggest not doing count($a, > 1), but using the reserved constant: count($a, COUNT_RECURSIVE). Not > only does it make it future proof (for example, what if the value of 1 > changed in the future), it also makes it easier to read the function > call... > > Anthony > > On Fri, May 18, 2012 at 5:03 PM, Donald Organ <dor...@donaldorgan.com> > wrote: > > http://us.php.net/count > > > > $size = count($array, 1); > > > > > > On Fri, May 18, 2012 at 4:54 PM, Anthony Ferrara <ircmax...@gmail.com> > > wrote: > >> > >> Another trick would be to not use function recursion, but a recursive > >> iterator: > >> > >> http://codepad.viper-7.com/9PeM9c > >> > >> function maxDepth(array $a) { > >> $it2 = new RecursiveIteratorIterator( > >> new RecursiveArrayIterator($a) > >> ); > >> $max = 0; > >> foreach ($it2 as $val) { > >> $max = max($max, $it2->getDepth()); > >> } > >> return $max; > >> } > >> > >> It will actually process less data, since the > >> RecursiveIteratorIterator mode is to skip non-leaf nodes (in other > >> words, elements that are arrays). So the max() call will only ever be > >> called for non-array values... A micro-optimization for sure, but > >> something worth noting... > >> > >> Anthony > >> > >> > >> On Fri, May 18, 2012 at 4:48 PM, justin <jus...@justinhileman.info> > wrote: > >> > function array_depth($el) { > >> > return is_array($el) ? max(array_map('array_depth', $el)) + 1 : 0; > >> > } > >> > > >> > var_dump(array_depth($array)); > >> > > >> > > >> > -- justin > >> > > >> > > >> > > >> > On Fri, May 18, 2012 at 1:27 PM, Joey Derrico <joeyd...@gmail.com> > >> > wrote: > >> >> I am trying to count the number of dimensions in an array. I used my > >> >> google-fu and came up with answers that don't actually work because I > >> >> can > >> >> have multi-dimensional array's where one int he middle is multi and > the > >> >> one > >> >> after not. Below is my latest set of test code (I have been playing > >> >> with it > >> >> for hours (with varying results), none correct), It currently returns > >> >> 15 > >> >> dimensions and should be returning 5 > >> >> > >> >> <?php > >> >> echo "\n"; > >> >> $test = new test(); > >> >> > >> >> $array = array(); > >> >> $array[0] = '[0]'; > >> >> $array[1][0] = '[1][0]'; > >> >> $array[1][1] = '[1][1]'; > >> >> $array[2][0][0] = '[2][0][0]'; > >> >> $array[2][0][1] = '[2][0][1]'; > >> >> $array[2][1][0] = '[2][1][0]'; > >> >> $array[2][1][1] = '[2][1][1]'; > >> >> $array[3][0][0][0] = '[3][0][0][0]'; > >> >> $array[3][0][0][1] = '[3][0][0][1]'; > >> >> $array[3][1][0][0] = '[3][1][0][0]'; > >> >> $array[3][1][0][1] = '[3][1][0][1]'; > >> >> $array[3][1][1][0] = '[3][1][1][0]'; > >> >> $array[3][1][1][1] = '[3][1][1][1]'; > >> >> $array[4][0][0][0][0] = '[4][0][0][0][0]'; > >> >> $array[4][0][0][0][1] = '[4][0][0][0][1]'; > >> >> $array[4][1][0][0][0] = '[4][1][0][0][0]'; > >> >> $array[4][1][0][0][1] = '[4][1][0][0][1]'; > >> >> $array[4][1][1][0][0] = '[4][1][1][0][0]'; > >> >> $array[4][1][1][0][1] = '[4][1][1][0][1]'; > >> >> $array[4][1][1][1][0] = '[4][1][1][1][0]'; > >> >> $array[4][1][1][1][1] = '[4][0][0][0][1]'; > >> >> $array[5][0][0][0] = '[5][0][0][0]'; > >> >> $array[5][0][0][1] = '[5][0][0][1]'; > >> >> $array[5][1][0][0] = '[5][1][0][0]'; > >> >> $array[5][1][0][1] = '[5][1][0][1]'; > >> >> $array[5][1][1][0] = '[5][1][1][0]'; > >> >> $array[5][1][1][1] = '[5][1][1][1]'; > >> >> $array[6][0][0] = '[6][0][0]'; > >> >> $array[6][0][1] = '[6][0][1]'; > >> >> $array[6][1][0] = '[6][1][0]'; > >> >> $array[6][1][1] = '[6][1][1]'; > >> >> $array[7][0] = '[7][0]'; > >> >> $array[7][1] = '[7][1]'; > >> >> $array[8] = '[8]'; > >> >> > >> >> echo 'The array has > '.$test->countNumberOfDimensionsOfAnArray($array)." > >> >> dimensions\n"; > >> >> //echo print_r($array,TRUE); > >> >> > >> >> > >> >> class test > >> >> { > >> >> public function isMultDimensionalArray($array) > >> >> { > >> >> $return = FALSE; > >> >> > >> >> if(is_array($array)){ > >> >> foreach($array as $value){ > >> >> if(is_array($value)){ > >> >> $return = TRUE; > >> >> } > >> >> } > >> >> } > >> >> return $return; > >> >> } > >> >> > >> >> public function countNumberOfDimensionsOfAnArray($array) > >> >> { > >> >> $dimensions = 0; > >> >> > >> >> if(is_array($array)){ > >> >> $dimensions++; > >> >> foreach($array as $key=>$value){ > >> >> if($this->isMultDimensionalArray($value)){ > >> >> $dimensions = $dimensions + > >> >> $this->countNumberOfDimensionsOfAnArray($value); > >> >> } > >> >> } > >> >> } > >> >> return $dimensions; > >> >> } > >> >> } > >> >> ?> > >> >> > >> >> Joey Derrico > >> >> > >> >> _______________________________________________ > >> >> New York PHP User Group Community Talk Mailing List > >> >> http://lists.nyphp.org/mailman/listinfo/talk > >> >> > >> >> http://www.nyphp.org/show-participation > >> > > >> > > >> > > >> > -- > >> > http://justinhileman.com > >> > _______________________________________________ > >> > New York PHP User Group Community Talk Mailing List > >> > http://lists.nyphp.org/mailman/listinfo/talk > >> > > >> > http://www.nyphp.org/show-participation > >> _______________________________________________ > >> New York PHP User Group Community Talk Mailing List > >> http://lists.nyphp.org/mailman/listinfo/talk > >> > >> http://www.nyphp.org/show-participation > > > > > > > > _______________________________________________ > > New York PHP User Group Community Talk Mailing List > > http://lists.nyphp.org/mailman/listinfo/talk > > > > http://www.nyphp.org/show-participation > _______________________________________________ > New York PHP User Group Community Talk Mailing List > http://lists.nyphp.org/mailman/listinfo/talk > > http://www.nyphp.org/show-participation >
_______________________________________________ New York PHP User Group Community Talk Mailing List http://lists.nyphp.org/mailman/listinfo/talk http://www.nyphp.org/show-participation