/*
* 抽奖算法
* @user AarthiModoo
* @time 2020-01-09 10:44:09
* @return array
* */
public function randomPrize()
{
/*
* prize 奖项
* weight 权重
* */
$prize = [
['id' => 1, 'prize' => '一个月vip', 'weight' => 25],
['id' => 2, 'prize' => '两个月vip', 'weight' => 25],
['id' => 3, 'prize' => '三个月vip', 'weight' => 25],
['id' => 4, 'prize' => '四个月vip', 'weight' => 25]
];
$result = []; // 初始化响应数组
$weight = []; // 初始化权重数组
foreach ($prize as $key => $val) {
$weight[$key] = $val['weight']; // 权重数据放入数组
}
// 概率数组的总概率
$weightSum = array_sum($weight); // 权重总和
asort($weight); // 排序
// 权重数组循环
foreach ($weight as $k => $v) {
$randNum = mt_rand(1, $weightSum); // 生成一个随机数
if ($randNum <= $v) {
$result = $prize[$k]; // 如果随机数小于等于当前权重,结束循环,数据放入响应数据内
break;
} else {
$weightSum -= $v; // 权重总和减去当前权重
}
}
return $result; // 数据返回
}