To generate a list of N random numbers ($actions_per) that add up to a certain value ($total_time):
$sleep_times = [];
$actions_per = 6;
$total_time = 60;
$sum = 0;
for ($action = 0; $action < $actions_per; $action++ ) {
$random_interval = rand(0,$total_time);
array_push($sleep_times, $random_interval);
$sum = $sum + $random_interval;
}
$scaleFactor = $sum / $total_time;
$checksum = 0;
foreach( $sleep_times as $sleep_time ){
$scaled = $sleep_time / $scaleFactor;
$checksum = $checksum + $scaled;
echo $scaled."
";
}
echo "Check:".$checksum;
Result:
$actions_per = 6, $total_time = 60:
9.2523364485981
3.9252336448598
12.056074766355
16.822429906542
11.495327102804
6.4485981308411
Check:60
$actions_per = 12, $total_time = 60:
9.0532544378698
8.5207100591716
6.5680473372781
2.3076923076923
9.0532544378698
3.3727810650888
3.5502958579882
4.6153846153846
4.4378698224852
2.1301775147929
4.792899408284
1.5976331360947
Check:60
$actions_per = 6, $total_time = 120:
23.907156673114
18.568665377176
3.0174081237911
25.299806576402
23.675048355899
25.531914893617
Check:120