php概率算法,php抽奖概率算法,php 中奖概率算法,php 抢红包 概率算法,php中奖概率 权重算法
2022-05-31PHP
最近,公司做大转盘中奖,用到了php中奖概率算法,这个算法可用于刮刮卡,大转盘等抽奖算法。用法很简单,代码里有详细注释说明,一看就懂,有需要的小伙伴参考下吧。
话不多说,先看前端页面效果

先完成后台PHP的流程,PHP的主要工作是负责配置奖项及对应的中奖概率,当前端页面点击翻动某个方块时会想后台PHP发送ajax请求,那么后台PHP根据配置的概率,通过概率算法给出中奖结果,同时将未中奖的奖项信息一并以JSON数据格式发送给前端页面
一、数据库设计
CREATE TABLE `ims_whm_probability` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `first_prize` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '一等奖概率', `second_prize` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '二等奖概率', `third_prize` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '三等奖概率', `fourth_prize` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '四等奖概率', `fifth_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '五等奖', `thanks` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '谢谢参与', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='大转盘 概率';
二、后台概率设置

三、php概率算法
// 代码亲测,概率与后台设置的概率相近
function getRand() {
// 微擎查数据库方法
// 意思是查找第一条数据
$find = pdo_get('whm_probability',array('id'=>1));
$proArr = array(
'first_prize' => $find['first_prize'],
'second_prize' => $find['second_prize'],
'third_prize' => $find['third_prize'],
'fourth_prize' => $find['fourth_prize'],
'fifth_price' => $find['fifth_price'],
'thanks' => $find['thanks'],
);
$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 $result;
}
很赞哦! ()
