rand(1,5)
..生成随机数,例如:4 3 2 3 2
(总和等于14)。
我希望总数不超过x
(也就是说5),所以在这种情况下,它可能是:
1 + 2 + 2 = 5
2 + 3 = 5
依此类推......只要sum < x
我应该生成一个随机的,检查x,生成另一个,再次检查还是有另一种方式?
答案 0 :(得分:4)
最明显的方法就是保持循环并生成一个越来越小的随机数,直到你被限制为止。
$min = 2;
$max = 5;
$randoms = [];
while ($max > $min) {
$max -= ( $rand = rand($min, $max) );
$randoms[] = $rand;
}
针对实际用例进行了更新(请参阅注释):
function generateRandomSpend($balance, $maximum = 5, $minimum = 2) {
$amounts = array();
while ($balance) {
// If we can't add any more minimum-spends, stop
if ($balance - $minimum < 0) {
break;
} else {
// Don't generate pointlessly-high values
$maximum = min($balance, $maximum);
$balance -= $amounts[] = rand($minimum, $maximum);
}
}
return $amounts;
}
print_r( $s = generateRandomSpend(10) );
您也可以
echo array_sum( generateRandomSpend(10) );
获取总支出的数值。
答案 1 :(得分:3)
这也有效,并提供您想要的结果
<?php
$fixed = 5;
$random = array();
$no = 0;
while(1) {
$number = rand(1,5);
$no +=$number;
if($no > $fixed) {
break;
}
$random[]= $number;
}
?>