4

我有以下数组:

public $percentage = array(
   0 => 20.30,
   1=> 19.96,
   2=> 14.15,
   3=> 45.59
);

// 总和为 100%

我需要一个随机函数按值的百分比返回键,

例如:得到 0 的可能性是 20.30%,得到 2 的可能性是 14.15%,第一个用户得到 0,第二个用户得到 2。

请让我知道您建议我使用的功能是什么。

4

4 回答 4

7

将百分比转换为累积概率,然后将其与随机数进行比较。

如果随机数属于某个类别,则输出结果。如果没有,请移动到下一个,直到找到一个。这允许您根据数组中规定的百分比概率输出一个数字。

$percentage = array(
   0 => 20.30,
   1=> 19.96,
   2=> 14.15,
   3=> 45.59
);
$random = mt_rand(0,10000)/100;
foreach ($percentage as $key => $value) {
    $accumulate += $value;
    if ($random <= $accumulate) {
        echo $key;
        break;
    }
}
于 2013-03-24T10:20:39.977 回答
2
$random_n = mt_rand(0,10000)/100;
while(true){
  if($random_n <= $percentage[0])
    echo 0; break;
  else if($random_n <= $percentage[1])
    echo 1; break;
  else if($random_n <= $percentage[2])
    echo 2; break;
  else if($random_n <= $percentage[3])
    echo 3; break;
  else
    $random_n = mt_rand(0,10000)/100; //generate a new random #
}
于 2013-03-24T10:16:43.457 回答
1
<?php
$percentage = $tmp = array(
   0 => 20.30,
   1=> 19.96,
   2=> 14.15,
   3=> 45.59
);

sort($tmp);

$rand = mt_rand(0,100);
foreach($tmp as $percent) {
    if($percent >= $rand) {
        echo array_search($percent,$percentage);
        die();
    }
}

echo (count($percentage) - 1);
于 2013-03-24T10:19:57.147 回答
0

我会做类似的事情:

  1. 取一个 1 到 10000 之间的随机数(因为你有四个有效数字)
  2. 如果数字在 1 到 2030 之间,则为零,如果在 2031 和 (2031+1996) 之间,则为 1,以此类推。
  3. ...
  4. 利润
于 2013-03-24T10:19:18.603 回答