//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,
)