在PHP中生成带有偏差结果的随机数

时间:2012-02-13 01:20:17

标签: php

我目前正在为我维护的网站编写积分系统,我希望每天为用户奖励一个随机点数。

这就是我的想法

[0-25] has a 75% chance 
[26 - 51] has a 13% chance
[52 - 76] has a 6% chance
[77 - 115] has a 4% chance
[115 - 200 ] has a mere 2% chance

因此,0-25点有75%的可能性被生成,所以最有可能是那个被生成的。

如果有人有任何想法或建议,听听他们会很棒。

所以,基本上我想要一个随机数生成,1-200,我希望0-25有更高的机会115-200。

1 个答案:

答案 0 :(得分:3)

首先生成0到99之间的随机数。然后在第一个选择的范围内生成第二个随机数。

$ranges = Array(
    Array(0,25,75), // [0-25] on 75% chance
    Array(26,51,13),
    Array(52,76,6),
    Array(77,115,4),
    Array(115,200,2)
);
$sel = rand(0,99);
do {
    $pick = array_shift($ranges);
    $sel -= $pick[2];
} while($pick && $sel >= 0);
$random = rand($pick[0],$pick[1]);