
<!-?php
/ *
*经典概率算法,
* $ proArr是一个预设数组,
*假设数组为: array(100,200,300,400),
*从1,1000的概率范围开始,筛选第一个数字是否在其出现概率范围内,
*如果不是,则为概率空间,即k的值减去前一个数字的概率空间,
*在此示例中,减去100,表示在1,900范围内选择了第二个数字.
*通过这种方式进行筛选后,总会有一个符合要求的数字.
*等同于触摸盒子中的某物,
*第一个不是,第二个不是,那么最后一个必须是.
*此算法简单且非常有效,

*关键是该算法已在我们以前的项目中使用,特别是在大数据项目中. 效率很好.
* /
functionget_rand($ proArr){
$ result ='';
//概率阵列的总概率精度
$ proSum = array_sum($ proArr);
//概率数组循环
foreach($ proArras $ key =-> $ proCur){
$ randNum = mt_rand(1,$ proSum);
if($ randNum <= $ proCur){
$ result = $ key;
休息;

}其他{
$ proSum-= $ proCur;
}
}
unset($ proArr);
return $ result;
}
/ *
*奖励阵列
*是一个二维数组,记录了本次抽奖的所有奖金信息php抽奖概率算法,
*其中id代表获胜等级,奖品代表奖品,v代表获胜的概率.
*请注意,v必须为整数,您可以将相应奖励的v设置为0,这意味着获奖的机会为0,

*数组(底数)中v的总和,底数越大,概率越准确.
*在此示例中,v的总和为100,则赢得相应平板电脑的概率为1%,
*如果v的总和为10000,则获胜的概率为10,000.
* /
$ prize_arr = array(
'0'=> array('id'=> 1,'prize'=>'Tablet PC','v'=> 1)php抽奖概率算法,
'1'=> array('id'=> 2,'prize'=>'数码相机','v'=> 5),
'2'=> array('id'=> 3,'prize'=>'扬声器设备','v'=> 10),
'3'=> array('id'=> 4,'prize'=>'4G USB闪存盘','v'=> 12),
'4'=> array('id'=> 5,'prize'=>'10Q coin','v'=> 22),
'5'=> array('id'=> 6,'prize'=>'下次您可能会得到它','v'=> 50),
);

/ *
*每次
*通过概率计算函数get_rand获取中奖ID.
*将获胜奖金保存在数组$ res ['yes']中,
*剩余的未赢得信息将保存在$ res ['no']中,
*最后将json编号数据输出到
* /
foreach($ prize_arras $ key => $ val){
$ arr [$ val ['id']] = $ val ['v'];
}
$ rid = get_rand($ arr); //根据概率获取奖励ID
$ res ['yes'] = $ prize_arr [$ rid-1] ['prize']; //中奖
unset($ prize_arr [$ rid-1]); //从数组中删除中奖者,留下未中奖者
shuffle($ prize_arr); //随机排列数组的顺序
for($ i = 0; $ i
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-253082-1.html
台不台独都要统一
我们的驱逐舰排水量达不到这个水平
聪明