您的位置:首页 > 编程语言 > PHP开发

php摇奖程序

2012-12-27 14:45 197 查看
//安中奖概率由小到大排好了序
//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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: