获取多维数组的总计数数组

时间:2014-06-11 22:51:02

标签: php arrays multidimensional-array iterator

我想知道是否有一种简单的方法可以在单个多维数组中获得嵌套数组的数量。这是一个简单的例子。

 $a = array (
      'x' => 
      array (
        0 => 'a',
        1 => 'b',
        2 => 'c',
        'text' => 
        array (
          0 => 'foo',
          1 => 'bar',
          2 => 'tar',
        ),
        3 => 
        array (
          'color' => 
          array (
            0 => 'red',
            1 => 
            array (
              0 => 'blue',
              1 => 
              array (
                'yellow' => 
                array (
                  'name' => 'john',
                  0 => 'doe',
                  1 => 
                  array (
                    0 => 'jane',
                  ),
                ),
              ),
            ),
          ),
        ),
      ),
    );

count()只会回显1。我可以做一个foreach循环,最终获得正确的值,但我不确定,如果有人能做得更好。即,使用SPL /迭代器。

2 个答案:

答案 0 :(得分:1)

我个人只会制作一个递归函数来计算。可能类似于:

/**
 * $n is an initial value if you wanted to add to the count.
 * Typically it would be zero. It is used in the array_reduce
 * $v is the array to count.
 */
function reduce($n, $v){
    //if the value is an array
    if(is_array($v)){
        //increment our count
        $n++;
        //recurse
        return array_reduce($v, 'reduce', $n);
    }
    //not an array, return our existing count
    return $n;
}

var_dump(reduce(0, $a));
//outputs: int(9)

这有一个主要问题(几乎任何解决方案),这是参考。通过使一个数组具有一个更高深度引用自身的值,可以捕获一个无限深的循环。

示例:http://codepad.viper-7.com/Ie9oyQ

答案 1 :(得分:0)

你可以递归地解决这个问题:

Class CountArrays{
    public $count = 0;

    function count(array $array){
        foreach($array as $entry){
            if(is_array($entry){
                $this->count++;
                $this->count($entry);
            } else {
                continue;
            }
        }
    }

}