php 抽奖算法 奖品数量固定

<?php
//这里的算法 这里的概率不是100%,而是 pr/sum(pr) 如:一等奖的概率为0.29%
$prize = array(array('level' => 1, 'name' => "IPhone X", 'pr' => 1),
 array('level' => 2, 'name' => "小米电视4", 'pr' => 5),
 array('level' => 3, 'name' => "小米8", 'pr' => 10),
 array('level' => 4, 'name' => "小米扫地机", 'pr' => 20),
 array('level' => 5, 'name' => "充电宝", 'pr' => 300),);
//所以 这里也可以变成奖品数量,然后抽掉一个 减去一个也可的 不会发生超支的情况,抽到充电宝越多,name抽到iphone x产生的概率就变大了。
//如果iphone x已抽取,那pr变成0 即可。
function getPrize($prize)
{
 $arr = array();
 foreach ($prize as $k => $v) {
 $arr[$v['level']] = $v['pr'];
 }
 $totalPr = array_sum($arr);
 foreach ($arr as $k => $v) {
 $randnum = mt_rand(1, $totalPr);
 if ($randnum <= $v) {
 $luck = $k;
 break;
 } else {
 $totalPr -= $v;
 }
 }
 return $luck;
}
for ($i = 0; $i < 10; $i++) {
 echo getPrize($prize);
 echo "
";
}

这个是参考别人的,可以结合具体产品数量,避免超额情况

参考地址:https://www.cnblogs.com/John727/p/4500095.html

php 抽奖算法 奖品数量固定