方法一:
function get_rand($proArr) {
  $result = array();
  foreach ($proArr as $key => $val) {
    $arr[$key] = $val['v'];
  }
  // 概率数组的总概率
  $proSum = array_sum($arr);
  asort($arr);
  // 概率数组循环
  foreach ($arr as $k => $v) {
    $randNum = mt_rand(1, $proSum);
    if ($randNum <= $v) {
      $result = $proArr[$k];
      break;
    } else {
      $proSum -= $v;
    }
  }
  return $result;
} $arr = array(
  array('id'=>1,'name'=>'特等奖','v'=>1),
  array('id'=>2,'name'=>'一等奖','v'=>5),
  array('id'=>3,'name'=>'二等奖','v'=>10),
  array('id'=>4,'name'=>'三等奖','v'=>12),
  array('id'=>5,'name'=>'四等奖','v'=>22),
  array('id'=>6,'name'=>'没中奖','v'=>50)
); var_dump(get_rand($arr));

  

方法二:
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;
} $arr = array(
  array('id'=>1,'name'=>'特等奖','v'=>1),
  array('id'=>2,'name'=>'一等奖','v'=>5),
  array('id'=>3,'name'=>'二等奖','v'=>10),
  array('id'=>4,'name'=>'三等奖','v'=>12),
  array('id'=>5,'name'=>'四等奖','v'=>22),
  array('id'=>6,'name'=>'没中奖','v'=>50)
); foreach ($arr as $val) {
$item[$val['id']] = $val['v'];
} var_dump(get_rand($item));

  

php抽奖概率算法的更多相关文章

  1. paip.刮刮卡砸金蛋抽奖概率算法跟核心流程.

    paip.刮刮卡砸金蛋抽奖概率算法跟核心流程. #---抽奖算法需要满足的需求如下: 1 #---抽奖核心流程 1 #---问题???更好的算法 2 #---实际使用的扩展抽奖算法(带奖品送完判断和每 ...

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

    两种方法:①概率随着抽的奖项的变少而时刻变化 经典的概率算法函数:如下 <?php /*  * 经典的概率算法,  * $proArr是一个预先设置的数组,  * 假设数组为:array(20, ...

  3. php 抽奖概率算法

    lottery.php <?php //转自https://segmentfault.com/a/1190000007431893 /* * 不同概率的抽奖原理就是把0到*(比重总数)的区间分块 ...

  4. JAVA基于权重的抽奖

    https://blog.csdn.net/huyuyang6688/article/details/50480687 如有4个元素A.B.C.D,权重分别为1.2.3.4,随机结果中A:B:C:D的 ...

  5. php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法

    php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法.用法很简单,代码里有详细注释说明,一看就懂 <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为: ...

  6. php几个常用的概率算法(抽奖、广告首选)

    做网站类的有时会弄个活动什么的,来让用户参加,既吸引用户注册,又提高网站的用户活跃度.同时参加的用户会获得一定的奖品,有100%中奖的,也有按一定概率中奖的,大的比如中个ipad.iphone5,小的 ...

  7. 高处胜寒 php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法

    <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300,400), * 开始是从1,1000 这个概率范围内筛选第一 ...

  8. PHP概率算法(适用于抽奖、随机广告)

    做网站类的有时会弄个活动什么的,来让用户参加,既吸引用户注册,又提高网站的用户活跃度.同时参加的用户会获得一定的奖品,有100%中奖的,也有按一定概率中奖的,大的比如中个ipad.iphone5,小的 ...

  9. 中奖概率算法(php 可用于刮刮卡,大转盘等抽奖算法)

    <?php //中奖概率算法(php 可用于刮刮卡,大转盘等抽奖算法) /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300, ...

随机推荐

  1. valgrind简介以及在ARM上交叉编译运行【转】

    转自:https://blog.csdn.net/dengcanjun6/article/details/54958359 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  2. C++类的继承中构造函数和析构函数调用顺序例子

    /*当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止.简而言之,对象是由“底层向上”开始构造的.因为,构造函数 ...

  3. latex中的希腊字母

    原文地址:http://blog.csdn.net/xxzhangx/article/details/52778539 希腊字母,我们从小学开始认识它,但对它的读音我依旧靠蒙(说蒙真的感觉好羞愧啊). ...

  4. hibernate框架学习之核心API

    ConfigurationSessionFactorySessionTransactionQueryCriteria Configuration Configuration对象用于封装Hibernat ...

  5. (转!)利用Keras实现图像分类与颜色分类

    2018-07-19 全部谷歌渣翻加略微修改 大家将就的看哈 建议大佬们还是看看原文 点击收获原文 其中用到的示例文件 multi-output-classification 大家可以点击 下载 . ...

  6. $Django 发送邮件--django封装模块和python内置SMTP模块

    一 使用SMTP模块发送邮件 import smtplib from email.mime.text import MIMEText from email.header import Header m ...

  7. 使用percona-xtrabackup工具对mysql数据库的备份方案

    使用percona-xtrabackup工具对mysql数据库的备份方案 需要备份mysql的主机 172.16.155.23存放备份mysql的主机 172.16.155.22 目的:将155.23 ...

  8. Docker从0开始之部署一套2048小游戏

    本文记录一下在docker部署一套2048小游戏的过程,在娱乐中熟悉docker的应用部署.docker 安装不在本文讲述之中,参考我的其它博客. 1.获取image镜像. 方法一:daocloud. ...

  9. su命令

    作用: 切换 用户 选项: -:可以更改当前目录为切换用户的家目录 使用: # 切换用户,当前所在用户目录不变 su 用户名 # 切换用户,当前所在目录改为切换对象的家目录 /home/用户名 su ...

  10. bsdiff的编译与使用

    bsdiff是一个差异包比较工具,可以用来实现增量更新. 下载地址:http://www.daemonology.net/bsdiff 编译 Mac环境 版本:macOS 10.12 1.解压下载的b ...