我想在PHP中编写一个函数,它允许根据定义的概率从列表中随机绘制一个元素。
例如:
对于输入(x = 20, y = 15, z = 35, t = 30)
的参数,该函数应该有20%的概率x,15%的y,35%的z和30%的t
有什么想法吗?
答案 0 :(得分:1)
给定一个输入数组映射元素到权重,比如
['x' => 20, 'y' => 15, 'z' => 35, 't' => 30]
这个问题的简单解决方案基本上是两个步骤:
生成随机数
$rand = rand(1, array_sum($weights));
迭代求和元素数组=>权重,直到你的随机数位于前一个总和和下一个总和之间。
$min = 0;
foreach ($weights as $element => $weight) {
$max = $min + $weight;
if ($rand > $min && $rand <= $max) {
// $element is the one you want
}
$min = $max;
}
至于将它变成一个函数,还有更多它,你可能想要验证你的输入加起来等等,但你可能更好地了解你希望这个部分如何工作比我做的。