如何查找特定范围的键的数组总和


how find sum of an array, for a specific range of keys

//input array
$array = {
          2 => 5,
          4 => 1,
          8 => 3,
          9 => 2,
}

想要特定时间段(如 1-5、6-10(的密钥总和

需要输出,如数组 {1-5 => 6 ,6-10 => 5}

试试这段代码。不是火箭科学..

function sumArray($array, $min, $max) {
   $sum = 0;
   foreach ($array as $k => $a) {
      if ($k >= $min && $k <= $max) {
         $sum += $a;
      }
   }
   return $sum;
}
echo sumArray($array, 1, 5);
# this is your answer
$sum = array_sum(array_slice($array, $from, $to));

考虑到您可能希望查看结果中表示的所有组/范围,并且某些数据可能不符合任何组的条件,因此我扩展了示例数据以显示这些注意事项。

使用具有最小和最大数量的有条件断开的嵌套循环,这将向各自的组/范围添加数量。

array_map()用于为所有声明的组/范围建立0值。

代码:(演示(

$array = [
    2 => 5,
    4 => 1,
    8 => 3,
    0 => 17,
    9 => 2,
    11 => 67
];
$ranges = [
    '1-5' => ['min' => 1, 'max' => 5],
    '6-10' => ['min' => 6, 'max' => 10],
    '1000-5000' => ['min' => 1000, 'max' => 5000],
];
$result = array_map(fn() => 0, $ranges);
foreach ($array as $num => $amount) {
    foreach ($ranges as $rangeName => ['min' => $min, 'max' => $max]) {
        if ($num >= $min && $num <= $max) {
            $result[$rangeName] += $amount;
            break;
        }
    }
}
var_export($result);

输出:

array (
  '1-5' => 6,
  '6-10' => 5,
  '1000-5000' => 0,
)