3v4l.org

run code in 500+ PHP versions simultaneously
<?php $weight_distribution = [ '1' => 0, '2-5' => 0, '5-10' => 6, '10-15' => 7, '15-20' => 3, ]; function distribute_weights(int|float $weight, array &$distribution): void { $parsed = []; foreach ($distribution as $range => $cost) { if (sscanf($range, '%d-%d', $min, $max) === 1) { $default = [$min, $min]; } else { $parsed[] = [$min, $max]; } } while ($weight > 0) { foreach ($parsed as $i => [$min, $max]) { if ($weight <= $max) { if (!$i && $weight <= $min) { [$min, $max] = $default; } break; } } if ($min === $max) { ++$distribution[$max]; } else { ++$distribution[$min . '-' . $max]; } $weight -= $max; } } distribute_weights(21, $weight_distribution); print_r($weight_distribution);
Output for 8.1.0 - 8.1.34, 8.2.0 - 8.2.30, 8.3.0 - 8.3.30, 8.4.1 - 8.4.18, 8.5.0 - 8.5.3
Array ( [1] => 1 [2-5] => 0 [5-10] => 6 [10-15] => 7 [15-20] => 4 )

preferences:
74.04 ms | 984 KiB | 4 Q