我想随机选择一个数字,但基于一组数字的概率;例如(2-6)。
我想要以下分布:
- 6的概率应该是10%
- 5的概率应该是40%
- 4的概率应该是35%
- 3的概率应该是5%
- 2的概率应该是5%
这很容易做到。注意下面代码中的注释。
$priorities = array(
6=> 10,
5=> 40,
4=> 35,
3=> 5,
2=> 5
);
# you put each of the values N times, based on N being the probability
# each occurrence of the number in the array is a chance it will get picked up
# same is with lotteries
$numbers = array();
foreach($priorities as $k=>$v){
for($i=0; $i<$v; $i++)
$numbers[] = $k;
}
# then you just pick a random value from the array
# the more occurrences, the more chances, and the occurrences are based on "priority"
$entry = $numbers[array_rand($numbers)];
echo "x: ".$entry;
创建一个 1 到 100 之间的数字。
If it's <= 10 -> 6
Else if it's <= 10+40 -> 5
Else if it's <= 10+40+35 -> 4
等等...
注意:您的概率加起来不是 100%。
您可以做的最好的事情是生成一个介于 0 到 100 之间的数字,并查看该数字在什么范围内:
$num=rand(0,100);
if ($num<10+40+35+5+5)
$result=2;
if ($num<10+40+35+5)
$result=3;
if ($num<10+40+35)
$result=4;
if ($num<10+40)
$result=5;
if ($num<10)
$result=6;
请注意,您的总概率不等于 1,因此有时 $result 未定义
如果您想要一些可以轻松配置的东西,请参阅@grigore-turbodisel 的答案。