PHP:如何随机选择最大概率值?

Ank*_*hah 4 php arrays random probability

我有以下数组和代码

    $a = [
      149 => 55,
      130 => 10,
      131 => 5,
      132 => 5,
      133 => 10,
      134 => 10,
      135 => 5
    ];

   $rand = rand (0,(count($a)-1));

   echo array_values($a)[$rand];
Run Code Online (Sandbox Code Playgroud)

这将主要产生 as5,10而不是55.

值的总和是 100% 的概率。值可以是十进制的,也可以是 55.55、10.10 等,但总体来说是 100%

我已经关注了https://www.geeksforgeeks.org/how-to-get-random-value-out-of-an-array-in-php/

但这并没有像预期的那样给出完美的结果。

所以应该主要随机选择概率最高的。

所以结果可以是这样的:55、55、10、10、10、55、5等。

我找到了一些有用的链接在 PHP 中按重量生成随机结果?其中概率 = 权重

ERe*_*oad 9

现在,你的数组是这样的:-

55, 10, 5, 5, 10, 10, 5
Run Code Online (Sandbox Code Playgroud)

现在,您应该在 [0, 100) 之间生成一个随机数,我们称之为r。

  • 现在,如果r位于 [0, 55) 之间,则选择值 55。
  • 否则如果r介于 [55, 55 + 10 = 65) 之间,则选择值 10。
  • 否则如果r位于 [65, 65 + 5 = 70) 之间,则选择值 5。
  • 否则如果r位于 [70, 70 + 5 = 75) 之间,则选择值 5。
  • 否则如果r介于 [75, 75 + 10 = 85) 之间,则选择值 10。
  • 否则如果r介于 [85, 85 + 10 = 95) 之间,则选择值 10。
  • 否则如果r位于 [95, 95 + 5 = 100) 之间,则选择值 5。

我相信你会有这个想法......

因此,对于一般情况,如果您有一个名为“arr”的数组,则这是伪代码:-

function SELECTPROB()
{
    $r = generateRandomNumber(0, 100);    //function to generate random number between 0 and 100, (100 exclusive)
    $sum = 0;
    foreach($arr as $i)
    {
        if($r >= $sum && $r < $sum + $i)
        {
            return $i
        }
        $sum = $sum + $i
    }
    return -1    //Should technically never reach upto this, but it can if your probability's sum is not 100
}
Run Code Online (Sandbox Code Playgroud)