不言不语

您现在的位置是: 首页 >  PHP

PHP

php概率算法,php抽奖概率算法,php 中奖概率算法,php 抢红包 概率算法,php中奖概率 权重算法

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

话不多说,先看前端页面效果

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概率算法


三、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;
    
}


文章评论