分享一个PHP抽奖算法
id
奖品编号prize
奖品名称v
中奖概率$prize_arr = array(array('id' => 1, 'prize' => '笔记本电脑', 'v' => 1),array('id' => 2, 'prize' => '华为手机', 'v' => 5),array('id' => 3, 'prize' => '蓝牙音箱', 'v' => 10),array('id' => 4, 'prize' => '1000积分', 'v' => 12),array('id' => 5, 'prize' => '30积分', 'v' => 22),array('id' => 6, 'prize' => '下次没准就能中哦', 'v' => 50),);
封装中奖概率函数
function get_rand($proArr){ $result = ''; //概率数组的总概率精度 $proSum = array_sum($proArr); //概率数组循环 foreach($proArr as $key => $proCur) { // 获取随机数 $randNum = mt_rand(1, $proSum); if($randNum <= $proCur) { $result = $key; break; } else { // 减掉当前中奖的概率 $proSum -= $proCur; } } unset ($proArr); return $result;}
获取中奖奖品
// 把奖品id 设置为键名$prize_arr = array_combine(array_column($prize_arr, 'id'), $prize_arr);foreach($prize_arr as $key => $val){ $arr[$val['id']] = $val['v'];}$rid = get_rand($arr); //根据概率获取奖项id$res['yes'] = $prize_arr[$rid]['prize']; //中奖项unset($prize_arr[$rid]); //将中奖项从数组中剔除,剩下未中奖项shuffle($prize_arr); //打乱数组顺序for($i = 0; $i < count($prize_arr); $i++){ $pr[] = $prize_arr[$i]['prize'];}$res['no'] = $pr;echo json_encode($res);
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。