这个忘记从哪里copy过来了

/**
* 概率算法
* @param array $probability
* @return integer|string
*/
function get_rand($probability) {
// 概率数组的总概率精度
$max = array_sum($probability);
foreach ($probability as $key => $val) {
$rand_number = mt_rand(1, $max);//从1到max中随机一个值 if ($rand_number <= $val) {//如果这个值小于等于当前中奖项的概率,我们就认为已经中奖
return $key;
} else {
$max -= $val;//否则max减去当前中奖项的概率,然后继续参与运算
}
}
/**
* 综上分析:
* 确保对每个人获取奖品的概率是一样的
* 如果某件奖品没了,应该讲概率修改为0
* 考虑到高并发,在检测到用户中奖后,应该检查一下奖品是否存在,没了就直接返回没中奖或者次一级奖品
* 最后才将中奖结果返回
*/
} // 概率比例
/* 接下来我们通过PHP配置奖项。 */
$data = array(
array(
"prize" => "平板电脑", "prob" => 1
),
array(
"prize" => "数码相机", "prob" => 3
),
array(
"prize" => "音箱设备", "prob" => 5
),
array(
"prize" => "8G优盘", "prob" => 20
),
array(
"prize" => "10Q币", "prob" => 200
),
array(
"prize" => "下次没准就能中噢", "prob" => 771
)
); foreach ($data as $key => $val) {
$probability[$key] = $val["prob"];
}
$n = get_rand($probability);
$res['yes'] = $data[$n]["prize"];//$res['yes'] =$data[$n][0]; unset($data[$n]); // 将中奖项从数组中剔除,剩下未中奖项
shuffle($data); // 将其它奖项顺序打乱 $func = create_function('$x', 'return $x["prize"];'); //$res['no'] = array_map(function($x){return $x[0];}, $data); // 除了中奖外的其他数据
$res['no'] = array_map($func, $data); // 除了中奖外的其他数据 print_r($res);

php按照奖品百分比随机抽奖代码分析的更多相关文章

  1. php实现概率性随机抽奖代码

    1.初始数据: 权重越大,抽取的几率越高 [奖品1, 权重 5], [ 奖品2, 权重6], [ 奖品3, 权重 7], [ 奖品4, 权重2] 2.处理步骤: 1)N = 5 + 6 + 7 + 2 ...

  2. php随机抽奖实例分析

    <?php header('Content-type:text/html;charset=utf-8'); /** * 抽奖工具 */ class lottery_tool { protecte ...

  3. C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断

    C#保留2位小数几种场景总结   场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.2 ...

  4. js手机号批量滚动抽奖代码实现

    我们平时在看一些选秀节目或一些歌唱类比赛节目时经常会看到在现场的大屏幕上会有观众的手机号在滚动来选出谁是幸运观众或谁中了什么奖项,这些手机号都是现场观众或场外观众在给选手投票时产生的,当主持人一声开始 ...

  5. Linux kernel的中断子系统之(七):GIC代码分析

    返回目录:<ARM-Linux中断系统>. 总结: 原文地址:<linux kernel的中断子系统之(七):GIC代码分析> 参考代码:http://elixir.free- ...

  6. jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码

    需求: 抽奖代码最多可以抽奖5次,而且,每次只会中“2000元理财金”或者“谢谢参与”,其它的不会抽中(哈哈,果然都是套路). 效果如下: 一.页面结构: ? 1 2 3 4 5 6 7 8 9 10 ...

  7. rocketmq生产者代码分析

    rocketmq生产者代码分析 环境安装 参考http://rocketmq.apache.org/docs/quick-start/ ,配置环境变量 export NAMESRV_ADDR=loca ...

  8. 【转载】word2vec原理推导与代码分析

    本文的理论部分大量参考<word2vec中的数学原理详解>,按照我这种初学者方便理解的顺序重新编排.重新叙述.题图来自siegfang的博客.我提出的Java方案基于kojisekig,我 ...

  9. tensorflow笔记:多层LSTM代码分析

    tensorflow笔记:多层LSTM代码分析 标签(空格分隔): tensorflow笔记 tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) ten ...

随机推荐

  1. Android 系统搜索框(有浏览记录)

    实现Android 系统搜索框(有浏览记录),先看下效果: 一.配置搜索描述文件  要在res中的xml文件加创建sreachable.xml,内容如下: <?xml version=" ...

  2. android打包apk时混淆遇到的问题

    android打包apk的时候一般会选择混淆,而在eclipse中常使用的是proguard来混淆.有很多时候引用了第三方包的时候会导致打包不成功,或者打包成功不能运行的情况. 首先看看正常的prog ...

  3. CF 17B Hierarchy

    Nick's company employed n people. Now Nick needs to build a tree hierarchy of «supervisor-surbodinat ...

  4. BZOJ 1212 HNOI 2004 L语言 Trie树

    标题效果:给一些词.和几个句子,当且仅当句子可以切子可以翻译词典,这意味着该子将被翻译. 找到最长前缀长度可以被翻译. 思维:使用Trie树阵刷.你可以刷到最长的地方是最长的字符串可以翻译到的地方. ...

  5. SilkTest Q&A 3

    Q21:如何给testcase的属性赋值? A21: 1.确定你的testplan处于打开状态. 2.点击你准备赋属性值的testcase 3.点击TestPlan/detail菜单,testplan ...

  6. 彻底卸载McAfee和Agent的方法

    1.控制面板中-添加或删除程序中-删除"McAfee VirusScan Enterprise"和"McAfee AntiSpyware Enterprise Modul ...

  7. Core Data 和 sqlite3的性能对比【图】3gs,iPhone4,4s,5的性能测试。

    demo 和源码再此下载  :http://download.csdn.net/detail/hherima/5603797

  8. 编程之美2013 初赛一 A - 竞价 学习大牛的思路

    这题我做了N久也做不出....赛后看了大牛AC的思路.... Program: #include<iostream> #include<cmath> #include<s ...

  9. pwd的实现

    #include <string.h> #include <stdlib.h> #include <dirent.h> #include <sys/types ...

  10. VC生成的DLL给QT的EXE调用时lib路径问题小结

    VC生成的DLL给QT调用,有两种方式,一种是隐式调用调用(使用.lib文件方式): ① 在*.pro工程文件中添加VC生成的lib文件路径时,或者使用一个绝对路径,如: LIBS += " ...