网站首页 文章专栏 转盘抽奖/概率抽奖算法
场景:
常见的转盘抽奖或者天降宝箱等概率抽奖
思路:
1.将每个奖品和概率设置为二维数组, key为奖品id,概率为value. 例如:
$proArr = [
['id'=>1, 'probability'=>100],
['id'=>2, 'probability'=>500],
['id'=>3, 'probability'=>1000],
]
1为0.3元奖励,2为500积分,3为谢谢光临
2.计算出概率之和proSum
3.在1和proSum之间求随机数randSum,随机数和每个奖品的概率比较。如果<=奖品的概率,那么是抽中,如果>奖品的概率,未抽中,概率之和proSum减去随机数接着遍历。
代码:
$proArr = ['1'=>100, '2'=>500, '3'=>1000]; public static function get_rand($proArr) { $result = ''; $proSum = array_sum($proArr); foreach ($proArr as $key => $proCur) { $randNum = mt_rand(1, $proSum); if ($randNum <= $proCur) { $result = $key; break; } else { $proSum -= $proCur; } } unset($proArr); return $result; }
方法1 数组 里面 有 100个 id1 500个 id2 1000个id3 ,从此数组随机抽出一个奖品
方法2 100+500+1000 从1~1600中奖随机取一个数 再去对比 得出奖品
方法1 方法2 都是随机 ,会不会概率不一样?