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

 更新时间:2020年04月17日 16:00:22   作者:高处胜寒  
这篇文章主要为大家详细介绍了php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法,用法很简单,代码里有详细注释说明,供大家参考,具体内容如下

<?php
/*
 * 经典的概率算法,
 * $proArr是一个预先设置的数组,
 * 假设数组为:array(100,200,300,400),
 * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内, 
 * 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,
 * 在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。
 * 这样 筛选到最终,总会有一个数满足要求。
 * 就相当于去一个箱子里摸东西,
 * 第一个不是,第二个不是,第三个还不是,那最后一个一定是。
 * 这个算法简单,而且效率非常高,
 * 这个算法在大数据量的项目中效率非常棒。
 */
function get_rand($proArr) { 
 $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; 
} 
 
 
/*
 * 奖项数组
 * 是一个二维数组,记录了所有本次抽奖的奖项信息,
 * 其中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_arr as $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<count($prize_arr);$i++){ 
 $pr[] = $prize_arr[$i]['prize']; 
} 
$res['no'] = $pr; 
print_r($res); 
?>

想要学习更多关于抽奖功能的实现,请参考此专题:抽奖功能

以上就是php抽奖概率算法的全部内容,希望对大家学习php程序设计有所帮助,也希望大家多多支持脚本之家。

相关文章

  • php在apache环境下实现gzip配置方法

    php在apache环境下实现gzip配置方法

    这篇文章主要介绍了php在apache环境下实现gzip配置方法,较为详细的分析了相关配置文件的修改技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • WordPress中查询文章的循环Loop结构及用法分析

    WordPress中查询文章的循环Loop结构及用法分析

    这篇文章主要介绍了WordPress中查询文章的循环Loop结构及用法分析,顺带介绍了提供各种查询方法的WP_Query类的一些基本情况,需要的朋友可以参考下
    2015-12-12
  • 深入理解PHP中的static和yield关键字

    深入理解PHP中的static和yield关键字

    这篇文章主要给大家介绍了关于PHP中static和yield关键字的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用php具有一定的参考学习价值,文章需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • php抓取网站图片并保存的实现方法

    php抓取网站图片并保存的实现方法

    这篇文章主要介绍了php抓取网站图片并保存的实现方法,重点借鉴了匹配img标签和其src属性正则的写法,封装了一个php远程抓取图片的类,感兴趣的小伙伴们可以参考一下
    2015-10-10
  • 利用php生成验证码

    利用php生成验证码

    本文主要分享了利用php生成验证码的示例代码,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • PHP开发注意事项总结

    PHP开发注意事项总结

    这篇文章主要介绍了PHP开发注意事项总结,非常详细,需要的朋友可以参考下
    2015-02-02
  • PHP实现一个按钮点击上传多个图片操作示例

    PHP实现一个按钮点击上传多个图片操作示例

    这篇文章主要介绍了PHP实现一个按钮点击上传多个图片操作,结合具体实例形式分析了PHP多文件上传前端提交与后台处理相关操作技巧,需要的朋友可以参考下
    2020-01-01
  • PHP提取字符串中的图片地址[正则表达式]

    PHP提取字符串中的图片地址[正则表达式]

    PHP提取字符串中的图片地址,实际就是利用正则表达式匹配图片地址,需要的朋友参考下。
    2011-11-11
  • PHP empty函数报错解决办法

    PHP empty函数报错解决办法

    这篇文章主要介绍了PHP empty函数在检测一个非变量情况下报错的解决办法,需要的朋友可以参考下
    2014-03-03
  • 模板引擎正则表达式调试小技巧

    模板引擎正则表达式调试小技巧

    很久没有遇上PHP难题了,这次正则问题占了一点时间,还是老问题最大回溯、递归限制问题。学习透之后其实并不难修改调试有这类问题的正则。主要是以下几点。
    2011-07-07

最新评论