PHP未知长度数组按间隔7位求和问题咨询
解决PHP无限长数组间隔7位元素分组求和的问题
嘿,作为PHP入门开发者碰到这个需求太正常了!不管数组多长,咱都能通过简单的逻辑搞定,给你两个实用的方案,都是新手能快速上手的:
方案一:一次遍历 + 模运算分组(效率最优)
这个方法只需要遍历数组一次,不管数组多大都能高效处理,核心是用索引对7取模来区分不同的分组:
<?php // 示例数组(长度随便,哪怕无限长) $array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; // 初始化结果数组,用来存7个分组的和 $groupSums = array_fill(0, 7, 0); // 遍历原数组的每个元素和对应的索引 foreach ($array as $index => $value) { // 计算当前元素属于哪个分组(0-6) $groupKey = $index % 7; // 把当前元素的值加到对应分组的和里 $groupSums[$groupKey] += $value; } // 输出结果:$groupSums[0]是0、7、14...的和,$groupSums[1]是1、8、15...的和,以此类推 print_r($groupSums); ?>
逻辑解释:
- 用
$index % 7得到的结果只会是0-6,刚好对应7个分组; - 每遍历一个元素,直接把它加到对应的分组总和里,一次循环就搞定,内存占用也极低,完全适配“无限长”数组的场景。
方案二:按步长提取元素求和(逻辑更直观)
如果你觉得模运算有点绕,可以试试这个更直白的方法:针对每个分组(0到6),按步长7提取所有对应元素,再用array_sum()求和:
<?php $array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; $groupSums = []; // 遍历7个分组(0到6) for ($i = 0; $i < 7; $i++) { // 从索引i开始,每隔7个元素取一个 $groupElements = []; for ($j = $i; isset($array[$j]); $j += 7) { $groupElements[] = $array[$j]; } // 计算当前分组的和,存入结果数组 $groupSums[$i] = array_sum($groupElements); } print_r($groupSums); ?>
逻辑解释:
- 外层循环控制分组(0到6),内层循环从当前分组的起始索引开始,每次加7,直到数组没有对应索引为止;
- 把每个分组的元素收集起来后,直接用PHP内置的
array_sum()求和,逻辑一目了然,新手好理解。
额外提示
如果你的数组是关联数组(不是连续数字索引),记得先转成索引数组再用上面的方法,比如用$array = array_values($array);转换后再处理。
内容的提问来源于stack exchange,提问作者Kirill S
相关产品推荐
相关产品推荐

