PHP rand(min, max)
介于1和9999之间,几乎所有结果都是4位数(因为有大约90%的数字有4位数)。所以,如果我跑了1000次,大约90%的人可能会有4位数。
有没有办法从1到9999生成一个随机INT,并且输出数字有相同的机会有1,2,3或4位而不用手动操作?
通过手动操作,我的意思是:
$digits = rand(1, 4);
$num = '';
for($i = 0; $i < $digits; $i++){
$num .= rand(0, 9);
}
$final = intval($num);
答案 0 :(得分:4)
所以,如果我跑1000次,大约90%的人可能会有4位数。
这就是统一分布的工作原理。没有开箱即用功能可以完成您之后的操作,因此您必须制作一些统计数据。
我想到的是:生成0到1之间的随机数。如果它在0到0.25之间,则生成0到9之间的另一个随机数。如果它在0到9之间。 .25和.5,生成10到99之间的另一个随机数,依此类推。然后,您有1/4的机会获得每个数量级。
这显然会偏向较低的数字,因为它们的数量较少。例如,1的机会为25% / 10 = 2.5%
,而1001的机会为25% / 8998 = 0.00277%
。
它是这样的:
<?php
$initial = rand(0, 100)/100;
if ($initial < .25) {
$random = rand(0, 9);
}
elseif ($initial < .5) {
$random = rand(10, 99);
}
elseif ($initial < .75) {
$random = rand(100, 999);
}
elseif ($initial >= .75) {
$random = rand(1000, 9999);
}
var_dump($random);