我想随机选择一个数字,但要根据一组数字的概率;例如(2-6)。
我想要以下发行版:
答案 0 :(得分: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 :(得分:3)
创建1到100之间的数字。
If it's <= 10 -> 6
Else if it's <= 10+40 -> 5
Else if it's <= 10+40+35 -> 4
等等......
注意:您的概率不会达到100%。
答案 2 :(得分:2)
您可以做的最好的事情是生成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的答案。