PHP如何计算多维数组的总和?求助可行实现方案
解决嵌套数组求和问题
我明白你的问题了——array_sum()确实搞不定嵌套数组,因为它只会处理一维元素,遇到子数组会直接转换为数值0,所以你得到的结果肯定和预期的5不符。你尝试的递归迭代器思路是对的,只是代码没写完整或者逻辑有误,我来帮你修正并提供两种可行的方案:
方案一:使用RecursiveIteratorIterator(迭代器方法)
这是PHP内置的遍历嵌套数组的便捷方式,它会自动帮你遍历所有层级的子元素,不需要手动处理递归逻辑。正确的写法如下:
// 你的目标数组 $array = [ 1 => 0, 2 => 1, 3 => [1, 1, 1], 4 => 1, 5 => 0 ]; // 初始化递归迭代器 $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); $sum = 0; // 遍历所有叶子节点并累加 foreach ($iterator as $value) { $sum += $value; } echo $sum; // 输出:5
你之前的代码里加了if($key == '3')的判断,这其实是多余的——RecursiveIteratorIterator会自动遍历键3对应的子数组里的每一个元素,直接累加所有$value就能得到正确总和。
方案二:自定义递归函数(手动实现递归)
如果你想更清晰地理解递归求和的逻辑,可以自己写一个递归函数,遍历每个元素并判断是否为数组:
function recursiveArraySum($array) { $sum = 0; foreach ($array as $element) { // 如果当前元素是数组,递归调用自身求子数组的和 if (is_array($element)) { $sum += recursiveArraySum($element); } else { // 否则直接累加数值 $sum += $element; } } return $sum; } // 你的目标数组 $array = [ 1 => 0, 2 => 1, 3 => [1, 1, 1], 4 => 1, 5 => 0 ]; echo recursiveArraySum($array); // 输出:5
这个函数的逻辑很直观:遍历数组的每个元素,遇到子数组就递归计算它的总和,遇到普通数值就直接加到总结果里,最终就能得到嵌套数组的全部元素之和。
内容的提问来源于stack exchange,提问作者Jeffrey W
相关产品推荐
相关产品推荐

