## 概率性抽獎(lottery_raffle)
~~~
//chance為抽到概率,數值越小,概率越小
$arr = [
['name'=>'1000元手機','chance'=>'1'],
['name'=>'100元代金券','chance'=>'10'],
['name'=>'10元代金券','chance'=>'100'],
['name'=>'謝謝參與','chance'=>'700'],
];
/**
* 抽獎概率算法
* @param array $prizeArr 獎品數組
* @param string $index 概率鍵名
* @return mixed 抽到的獎品
*/
function lottery_raffle($prizeArr,$index='chance')
{
$result = '';
$randArr = [];
$i = 1;
foreach($prizeArr as $item){
$randArr[$i] = $item[$index];
$i++;
}
//概率數組的總概率精度
$proSum = array_sum($randArr);
//概率數組循環
foreach ($randArr as $key => $val) {
$randNum = mt_rand(1, $proSum);
if ($randNum <= $val) {
$result = $key;
break;
} else {
$proSum -= $val;
}
}
return $prizeArr[$result];
}
~~~
## 示例
~~~
//輸出抽獎結果,例如:array ( 'name' => '謝謝參與', 'chance' => '700', )
var_export(lottery_raffle($arr));
~~~