如何递归地对特定数组键的所有值求和?

2024-03-23

我有一个像这样的数组:

Array
(
    [1000] => Array
        (
            [pv] => 36
        )

    [1101] => Array
        (
            [1102] => Array
                (
                    [pv] => 92
                )

            [pv] => 38
        )

    [pv] => 64
)

如何找到带有键“pv”的所有数组元素的总和,无论它们出现的深度如何?

对于这个例子,结果将是36+92+38+64 = 230


另一种选择:

$sum = 0;
$array_obj = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
foreach($array_obj as $key => $value) {
    if($key == 'pv')
        $sum += $value;
}
echo $sum;

Update:只是想我会提到这个方法使用 PHPSPL 迭代器。 http://php.net/manual/en/book.spl.php


萨拉特编辑:

过滤键并对值求和(无需编写自定义迭代器)的一种简单(相对)方法是使用RegexIterator,将生成的迭代器转换为数组并使用方便的array_sum其上发挥作用。这纯粹是一种学术练习,我当然不会提倡它作为best实现这一目标的方法...但是,它只是一行代码。 :)

$sum = array_sum(
    iterator_to_array(
        new RegexIterator(
            new RecursiveIteratorIterator(
                new RecursiveArrayIterator($array)
            ),
            '/^pv$/D',
            RegexIterator::MATCH,
            RegexIterator::USE_KEY
        ),
        false
    )
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何递归地对特定数组键的所有值求和? 的相关文章

随机推荐