php摇奖程序
来源:互联网 发布:wiley数据库介绍 编辑:程序博客网 时间:2024/04/30 03:47
//安中奖概率由小到大排好了序//id:奖项id用于做甘某些数据的关联时用,prize为奖品名称,v为中奖概率,prize_id为中奖id,num为奖品的剩余量:-1代表不限制,0表示奖品已经没了$prize_arr = array( '0' => array('id'=>1,'prize'=>'平板电脑','v'=>100,'num'=>0,'prize_id'=>0), '1' => array('id'=>2,'prize'=>'数码相机','v'=>500,'num'=>10,'prize_id'=>0), '2' => array('id'=>3,'prize'=>'音箱设备','v'=>1000,'num'=>100,'prize_id'=>0), '3' => array('id'=>4,'prize'=>'4G优盘','v'=>1200,'num'=>1000,'prize_id'=>0), '4' => array('id'=>5,'prize'=>'10Q币','v'=>2200,'num'=>-1,'prize_id'=>0), '5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>5000,'num'=>-1,'prize_id'=>0), );//摇奖方法一: $res = get_rand($prize_arr); //根据概率获取奖项id //根据概率获取奖项id //摇奖方法二(推荐):$prize = get_rand2($prize_arr);function get_rand($prize_arr) {$proArr = array();foreach ($prize_arr as $key => $val) { $proArr[$key] = $val['v']; } $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 $prize_arr[$result]; }function get_rand2($prize_arr) {$proSum = 0;//概率基数 $result = '';//添加prize_id$prize_id = 0;foreach($prize_arr as $key=>&$val){if($val['num']!=0){$proSum += $val['v'];$prize_id += $val['v'];$val['prize_id'] = $prize_id;}else{$val['prize_id'] = 0;}}unset($key,$val); $prize_id = rand(1,$proSum);//摇中的奖品id foreach($prize_arr as $key=>$val){ if($prize_id<=$val['prize_id']){ $result = $val; print_r($result); break; } } return $result; }