以递归方式获取多维数组中的所有数据的总和:

时间:2017-01-07 07:39:03

标签: php arrays

我是这个阵列:

Array
(
    [self] => Folder A
    [my_data] => Array
        (
        )

    [18] => Array
        (
            [self] => Folder AA
            [my_data] => Array
                (
                    [0] => stdClass Object()
                )
            [20] => Array
                (
                    [self] => Folder AA
                    [my_data] => Array
                        (
                            [0] => stdClass Object()
                        )
                    [21] => Array
                )

我想在' my_data'中获取当前记录的总数。为此,我创建了这个函数,递归调用以添加计数:

function getDocumentCount($tab, $count = 0) {
    foreach ($tab as $subTabKey => $subTabValue) {
        if ($subTabKey == 'my_data') {
            $count += count($subTabValue);
        }
        if ( count($tab) > 2 && $subTabKey != 'self' && $subTabKey != 'my_data' ) {
            $count += getDocumentCount($subTabValue, $count);
        }
    }

    return $count;
}

但是这个函数总是返回0.上面的例子应该返回2

编辑:这应该返回5但返回9

Array
(
    [self] => Main Folder 22
    [my_data] => Array
        (
        )

    [17] => Array
        (
            [self] => New Sub
            [my_data] => Array
                (
                    [0] => stdClass Object()
                    [1] => stdClass Object()
                )
        )

    [8] => Array
        (
            [self] => sub folder 21
            [my_data] => Array
                (
                )

            [9] => Array
                (
                    [self] => sub folder 211
                    [my_data] => Array
                        (
                            [0] => stdClass Object()
                            [1] => stdClass Object()
                            [2] => stdClass Object()
                        )

                )

        )

)

2 个答案:

答案 0 :(得分:0)

您没有将对getDocumentCount()的通话结果添加到您的计数中。尝试将函数的第六行更改为:

$count += getDocumentCount($subTabValue, $count);

这可以解决您的问题吗?

答案 1 :(得分:0)

您刚刚计算了my_data长度为0的数组的第一个维度,因此$ count为0.虽然您还计算了数组的内部维度,但您没有对它们的输出求和。您还必须对内部输出的输出求和。

function getDocumentCount($tab, &$count) {
    foreach ($tab as $subTabKey => $subTabValue) {
        if ($subTabKey == 'my_data') {
            $count += count($subTabValue);
        }
        if ( count($tab) > 2 && $subTabKey != 'self' && $subTabKey != 'my_data' ) {
            getDocumentCount($subTabValue, $count);
        }
    }
}

使用它:

$count = 0;
getDocumentCount($tab, $count);
echo $count;