php限制一天抽奖次数_PHP可以修改概率的抽奖算法(例如转盘等,个人感觉蛮好用)...

04336d15f8b57e000ed1ff6b77fe34b3.png

191c5b8876adea6d6227f15fe85d896d.png

近几天要给网站加一个转盘抽奖的的功能,我们知道转盘抽奖这些一般情况是小件物品的中间概率远大于大件物品,这样一方面能安慰抽奖用户,另一方面对于抽奖获得的举办者不至于亏损,看下面的代码:

//概率算法,6个奖项,id自己编码,prize即奖品的描述,v是所占的比例,这这里6个奖项的总概率是2000,

//如果v=1那么就是说中间概率是1/2000以此类推

$prize_arr = array(

'0' => array('id'=>1,'prize'=>'iphone6','v'=>1),

'1' => array('id'=>2,'prize'=>'数码相机','v'=>5),

'2' => array('id'=>3,'prize'=>'音箱设备','v'=>10),

'3' => array('id'=>4,'prize'=>'50Q币','v'=>24),

'4' => array('id'=>5,'prize'=>'10Q币','v'=>60),

'5' => array('id'=>6,'prize'=>'1Q币','v'=>1900),

);

//每个奖品的中奖几率,奖品ID作为数组下标

foreach($prize_arr as $val){

$item[$val['id']] = $val['v'];

}

function get($item){

//中奖概率基数

$num = array_sum($item);//当前一等奖概率1/2000

foreach($item as $k=>$v){

//获取一个1到当前基数范围的随机数

$rand = mt_rand(1,$num);

if($rand <= $v){

//假设当前奖项$k=2,$v<=5才能中奖

$res = $k;

break;

}else{

//假设当前奖项$k=6,$v>1900,则没中六等奖,总获奖基数2000-1900,前五次循环都没中则2000-1-5-10-24-60=1900,必中6等奖,哈哈

$num -= $v;

}

}

return $res;

}

$res = get($item);

$h = $prize_arr[$res-1]['prize'];

echo $h;

运行效果测试还是蛮好的,如果亲觉得1/2000的概率还是大的话可以把小件商品的v值加大,也就是基数变大,这样总体概率就会降低了,大家可以试一试,搭配转盘的效果还是不错的,这里是6个奖项,亲也可以设置多几个比如设置10个,12个都还蛮不错的

我的微信:graent_hu

欢迎扫码加我的微信好友,有什么问题我们可以一起探讨,有什么需要也随时欢迎发消息给我~

转载请注明出处:

本文链接:https://www.wlyc.cn/post-60.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值