1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > php抽奖概率算法(刮刮卡 大转盘)

php抽奖概率算法(刮刮卡 大转盘)

时间:2019-12-17 20:42:47

相关推荐

php抽奖概率算法(刮刮卡 大转盘)

抽奖,概率不变化:

经典的概率算法函数:如下

<?php/** 经典的概率算法,* $proArr是一个预先设置的数组,* 假设数组为:array(20,30,50),* 开始是从1,100 这个概率范围内筛选第一个数是否在他的出现概率范围之内,* 如果不在,概率变成100-20=80,* 就相当于去一个箱子里摸东西,* 第一个不是,第二个不是,第三个还不是,那最后一个一定是。* 这样 筛选到最终,总会有一个数满足要求。* 这个算法在大数据量的项目中效率非常棒。*/functionget_rand($proArr) {$result='';//概率数组的总概率精度$proSum=array_sum($proArr);//概率数组循环foreach($proArras$key=>$proCur) {$randNum= mt_rand(1,$proSum);if($randNum<=$proCur) {$result=$key; //获得奖品的IDbreak;}else{$proSum-=$proCur;}}unset ($proArr);return$result;}/** 奖项数组* 是一个二维数组,记录了所有本次抽奖的奖项信息,* 其中id表示中奖等级,prize表示奖品,v表示中奖概率。* 注意其中的v必须为整数,你可以将对应的 奖项的v设置成0,即意味着该奖项抽中的几率是0,* 数组中v的总和(基数),基数越大越能体现概率的准确性。* 本例中v的总和为100,那么平板电脑对应的 中奖概率就是1%,* 如果v的总和是10000,那中奖概率就是万分之一了。**/$prize_arr=array('0'=>array('id'=>1,'prize'=>'平板电脑','v'=>1),'1'=>array('id'=>2,'prize'=>'数码相机','v'=>5),'2'=>array('id'=>3,'prize'=>'音箱设备','v'=>10),'3'=>array('id'=>4,'prize'=>'4G优盘','v'=>12),'4'=>array('id'=>5,'prize'=>'10Q币','v'=>22),'5'=>array('id'=>6,'prize'=>'下次没准就能中哦','v'=>50),);

/** 每次前端页面的请求,PHP循环奖项设置数组,* 通过概率计算函数get_rand获取抽中的奖项id。* 将中奖奖品保存在数组$res['yes']中,* 而剩下的未中奖的信息保存在$res['no']中,* 最后输出json格式数据给前端页面。*/foreach($prize_arras$key=>$val) {$arr[$val['id']] =$val['v']; //这里$arr的‘id’是从1开始的哦。}$rid= get_rand($arr);//根据概率获取奖项id$res['yes'] =$prize_arr[$rid-1]['prize'];//中奖项unset($prize_arr[$rid-1]);//将中奖项从数组中剔除,剩下未中奖项,这一步和下一步具体看奖品数量是否为1,是1则删除并且打乱顺序shuffle($prize_arr);//打乱数组顺序for($i=0;$i<count($prize_arr);$i++){$pr[] =$prize_arr[$i]['prize'];}$res['no'] =$pr;echo json_enconde($res);?>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。