Php递归数组计数

Den*_*suk 6 php arrays recursion arraylist multidimensional-array

我正在尝试编写一个递归计数数组元素的函数.

但结果是错误的.

这有什么问题?

$schema = array(
    'div' => array(
        'class' => 'lines',
        'div' => array(
             'span' => array(
                'key' => 'Product Name'
            ),
            'val' => 'Soap'
        ),
        'layer' => array(
             'span' => array(
                'key' => 'Product Name'
            ),
            'val' => 'Ball'
            )
        )
);

function count_r($array, $i = 0){
    foreach($array as $k){
        if(is_array($k)){ $i += count_r($k, count($k)); }
        else{ $i++; }
    }
    return $i;
}

echo count_r($schema);
Run Code Online (Sandbox Code Playgroud)

Chr*_*n P 30

这是谷歌的第二个结果,所以我将其作为参考添加.PHP中已经有一个内置函数可以使用:count().

你可以像这样使用它:

count($schema, COUNT_RECURSIVE);
Run Code Online (Sandbox Code Playgroud)

此函数还可以检测递归以避免无限循环,因此它比其他答案中的解决方案更安全.


小智 6

PHP为此有一个内置方法,称为count()。如果传递时不带任何其他参数,则count()返回第一级上的数组键数。但是,如果将第二个参数传递给count方法count( $schema, true ),则结果将是多维数组中键的总数。标记为正确的响应只会迭代第一级和第二级数组,如果该数组中有第三个子级,它将不会返回正确的答案。

但是,如果您确实想编写自己的count()方法,则可以将其编写为递归函数。