<?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 "\r\n";
}
這個是參考別人的,可以結合具體產品數量,避免超額情況
參考地址:https://www.cnblogs.com/John727/p/4500095.html