如何根据定义的概率从列表中随机绘制元素

时间:2017-09-27 19:46:29

标签: php random

我想在PHP中编写一个函数,它允许根据定义的概率从列表中随机绘制一个元素。

例如:

对于输入(x = 20, y = 15, z = 35, t = 30)的参数,该函数应该有20%的概率x,15%的y,35%的z和30%的t

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

给定一个输入数组映射元素到权重,比如

['x' => 20, 'y' => 15, 'z' => 35, 't' => 30]

这个问题的简单解决方案基本上是两个步骤:

  1. 生成随机数

    $rand = rand(1, array_sum($weights));
    
  2. 迭代求和元素数组=>权重,直到你的随机数位于前一个总和和下一个总和之间。

    $min = 0;
    foreach ($weights as $element => $weight) {
        $max = $min + $weight;
        if ($rand > $min && $rand <= $max) {
            // $element is the one you want
        }
        $min = $max;
    }
    
  3. 至于将它变成一个函数,还有更多它,你可能想要验证你的输入加起来等等,但你可能更好地了解你希望这个部分如何工作比我做的。