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 中按重量生成随机结果?其中概率 = 权重
现在,你的数组是这样的:-
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)