分享网址:
http://www.dooccn.com/php7/#id/b68e0f6af9ba47807a24478ffdaf2684
<?php
function randNumberArray($min, $max, $count){
$res = [];
foreach (range(1, $count) as $n) {
$res[] = mt_rand($min, $max);
}
sort($res, SORT_NUMERIC);
return $res;
}
/**
* 合并秒和毫钞,并按从小到大排序
*/
function mergeTimeMillisecond($times, $milliseconds){
sort($times, SORT_NUMERIC);
$times = array_map(function ($v,$idx) use ($milliseconds) {
return $v * 1000 + ($milliseconds[$idx]??0);
}, $times, array_keys($times));
sort($times, SORT_NUMERIC);
$times = array_map(function ($v) {
$_f = explode('.', strval($v / 1000));
return [
$_f[0],
$_f[1]??0
];
}, $times, array_keys($times));
return $times;
}
function randMillisecond($count, $total, $extent=0.3){
$res = [];
$svg = $total / $count;
for($i=1;$i<$count;$i++){
$_rand = mt_rand(max(0, $svg-($svg*$extent)), min(999, $svg+($svg*$extent)));
$res[] = $_rand;
}
$end = $total - array_sum($res);
if ($end < 0) {
$end = abs($end);
foreach ($res as &$v) {
if ($v > $end) {
$v -=$end;
continue;
}
}
unset($v);
$end = 0;
}
$res[] = $end;
shuffle($res);
return $res;
}
$count = 10;
$total = intval(999 * $count * .5);
$res = randMillisecond($count, $total);
$times = randNumberArray(time() - 10, time(), 10);
$times = mergeTimeMillisecond($times, $res);
var_dump($count, $total, $res, array_sum($res), $times);