首先,初始化数组?
? ? ? ? //奖品列表,weight为权重
? ? ? ? $prizes = [
? ? ? ? ? ? ['PrizeCode'=>'A','PrizeName' => 'A赏', 'Weight' => 2],
? ? ? ? ? ? ['PrizeCode'=>'B','PrizeName' => 'B赏','Weight' => 4],
? ? ? ? ? ? ['PrizeCode'=>'C','PrizeName' => 'C赏','Weight' => 4],
? ? ? ? ? ? ['PrizeCode'=>'D','PrizeName' => 'D赏','Weight' => 4],
? ? ? ? ? ? ['PrizeCode'=>'E','PrizeName' => 'E赏', 'Weight' => 22],
? ? ? ? ? ? ['PrizeCode'=>'F','PrizeName' => 'F赏', 'Weight' => 20],
? ? ? ? ? ? ['PrizeCode'=>'G','PrizeName' => 'G赏', 'Weight' => 24]
? ? ? ? ];
然后设置一个抽奖函数
function getPrize($prizes){
? ? ? ? //打乱奖品数组顺序
? ? ? ? shuffle($prizes );
? ? ? ? // 权重计算
? ? ? ? $weightCount = 0;
? ? ? ? foreach ($prizes as $prize) {
? ? ? ? ? ? $weightCount += $prize['Weight'];
? ? ? ? }
? ? ? ? // 随机数抽奖,取5次平均值
? ? ? ? $rand1 = mt_rand(1, $weightCount);
? ? ? ? $rand2 = mt_rand(1, $weightCount);
? ? ? ? $rand3 = mt_rand(1, $weightCount);
? ? ? ? $rand4 = mt_rand(1, $weightCount);
? ? ? ? $rand5 = mt_rand(1, $weightCount);
? ? ? ? $rand6 = mt_rand(1, $weightCount);
? ? ? ? // 最终随机数
? ? ? ? $rand = intval(($rand1 + $rand2 + $rand3 + $rand4 + $rand5 + $rand6) / 6);
? ? ? ? $lastWeight = 0; ? //权重计算中间值
? ? ? ? $userPrize = null; //奖品
? ? ? ? foreach ($prizes as $prize) {
? ? ? ? ? ? if ($rand > $lastWeight && $rand <= ($prize['Weight'] + $lastWeight)) {
? ? ? ? ? ? ? ? $userPrize = $prize;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? $lastWeight += $prize['Weight'];
? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? }
? ? ? ? }
return $userPrize;
}
最后直接调用函数即可
|