-1

我想随机选择一个数字,但基于一组数字的概率;例如(2-6)。

我想要以下分布:

  • 6的概率应该是10%
  • 5的概率应该是40%
  • 4的概率应该是35%
  • 3的概率应该是5%
  • 2的概率应该是5%
4

3 回答 3

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;
于 2013-07-12T12:21:09.930 回答
3

创建一个 1 到 100 之间的数字。

If      it's <= 10       -> 6
Else if it's <= 10+40    -> 5
Else if it's <= 10+40+35 -> 4

等等...

注意:您的概率加起来不是 100%。

于 2013-07-12T12:16:54.043 回答
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 的答案。

于 2013-07-12T12:19:58.913 回答