首页 > 解决方案 > 如何从循环中的某些索引对数组中的值求和

问题描述

我正在尝试对另一个数组提供的特定范围内的数组值求和。

我试过这个功能

function sumArray($array, $min, $max) {
    $sum = 0;
    foreach ($array as $k => $v) {
       if ($k >= $min && $k <= $max) {
          $sum += $v;
       }
    }
    return $sum;
 }

如果我当然对数字进行硬编码,这可以工作,但我不知道如何让这个工作在循环中

所以我有这个日期数组

array(3) {
  ["June"]=> int(4)
  ["July"]=> int(31)
  ["August"]=> int(29)
}

我有这个 daily_values 数组

array(64) {
  [0]=> int(8)
  [1]=> int(6)
  [2]=> int(10)
  [3]=> int(15)
  [4]=> int(10)
  [5]=> int(9)
  [6]=> int(9)
  .
  .
  .
  [63] => int(10)

现在我想在这里做的是:基于例如 June 中有多少条目,在这种情况下为 4,我想获得 daily_values 数组中的值的总和,如下所示:

第一次循环迭代将对daily_values数组中的值求和,从0到3,第二次循环迭代将对从4到34的值求和,第三次循环迭代将对从35到63的值求和,依此类推。

所以我想要的最后一件事是拥有一个像这样的数组

["sum of 0,3", "sum of 4,34", "sum of 35,63"]

这里只是一个注释,这个数组要大得多,但我只是为了提问而把它缩短了。

标签: phparrays

解决方案


我试图理解你的问题,这就是我认为你想要实现的目标。我创建了一个类似的测试,它工作正常。希望它以某种方式帮助你。

<?php

$june = [1,1,1,1];
$july = [1,1];
$august = [1,1,1,1];

$months = array(
    'June' => $june, 
    'July' => $july, 
    'August' => $august, 
);

$daily = [1,1,1,1,5,5,10,10,10,10,2,2,2,2,2];
$sum_arr = array();

$i = 0;
foreach($months as $key=>$month){

    $month_count = $month;
    $month_sum = 0;
    while($month_count > 0){
        $month_sum += $daily[$i];
        $i++;
        $month_count--;
    }
    $sum_arr[$key] = $month_sum;
}

echo '<pre>';
print_r($sum_arr);

?>

推荐阅读