php 范围内随机算法 红包盲盒随机算法
<?php
function generateEnvelope($coin, $num, $min)
{
$avg = bcdiv($coin, $num, 2);
if ($min > $avg) {
return false;
}
if ($num == 1) {
return $coin;
}
$max = $avg + ($avg - $min);
$list = array_fill(0, $num, $avg);
if ($num % 2 == 1) {
$list[0] += 0.01;
}
for ($k = 0; $k < $num; $k++) {
while (true) {
$rand = floor(rand($min * 100, $max * 100)) / 100;
$change = $list[$k] - $rand;
$kl = $k + 1;
if ($kl == $num) {
$kl = 0;
}
$new = $list[$kl] + $change;
if ($new >= $min && $new <= $max) {
$list[$kl] = $new;
$list[$k] = $rand;
break;
}
}
}
return $list;
}
$new = generateEnvelope(100, 10, 9);
var_dump($new);
var_dump(array_sum($new));