<?php
$array = [
'5' => 142,
'2' => 57,
'0' => 0,
'18' => 37,
'3' => 13,
'6' => 101,
];
$groupLimit = 50;
$result = [];
$groupKey = 0;
foreach ($array as $key => $value) {
while ($value) {
$sum = array_sum($result[$groupKey] ?? []); // get group sum
$value -= $result[$groupKey][$key] = min($groupLimit - $sum, $value); // push key with limited value; decrease value
$groupKey += ($sum + $result[$groupKey][$key] === $groupLimit); // only increment group key if at $groupLimit
}
}
var_export($result);
- Output for 7.4.0 - 7.4.33, 8.0.1 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.6
- array (
0 =>
array (
5 => 50,
),
1 =>
array (
5 => 50,
),
2 =>
array (
5 => 42,
2 => 8,
),
3 =>
array (
2 => 49,
18 => 1,
),
4 =>
array (
18 => 36,
3 => 13,
6 => 1,
),
5 =>
array (
6 => 50,
),
6 =>
array (
6 => 50,
),
)
preferences:
124.72 ms | 403 KiB | 121 Q