CodeIgniter-Lottery - php ci 抽奖辅助函数
CodeIgniter-Lottery - php ci 抽奖辅助函数
Github
用法
1、 移入文件
将lottery_helper.php放在你的工程根目录/application/helpers/
2、导入辅助函数
$this->load->helper('lottery');
3、调用
//抽奖,返回奖品id
$price_id = lottery($arr);
echo $price_id;
关于$arr参数的规范有下面两种方式:
方法一:直接传 array 参数
$arr = array(
array(
"id" => 1,
"rate" => 0.1,
),
array(
"id" => 2,
"rate" => 0.2345,
),
array(
"id" => 3,
"rate" => 0,
)
);
注:
(1) id :奖品编号, rate:奖品中奖概率
(2) id 从 1 开始递增
(3) rate 为 [0,1]
方法二:利用 $query->result_array() 查询数据库后返回的结果$result
$sql = "SELECT `id`,rate FROM `price_table`";
$query = $this->db->query($sql);
$result = $query->result_array();
if (is_array($result) && count($result, COUNT_NORMAL) > 0) {
return $result;
} else {
return false;
}
算法原理
以上文方法一:直接传 array 参数传的参数举例:
1、定义奖品,记得加上未中奖的情况
| type | id | rate |
|---|---|---|
| 奖品1 | 1 | 0.1 |
| 奖品2 | 2 | 0.234 |
| 奖品3 | 3 | 0 |
| 未中奖 | 4 | 0.6655 |
2、按照 rate (中奖概率)递增排序
| type | id | rate |
|---|---|---|
| 奖品3 | 3 | 0 |
| 奖品1 | 1 | 0.1 |
| 奖品2 | 2 | 0.234 |
| 未中奖 | 4 | 0.6655 |
3、取出除 0 以外的最小 rate:min_rate = 0.1,并计算每个奖品的权重值( weight )
权重值计算公式:weight = rate / min_rate
| type | id | rate | weight |
|---|---|---|---|
| 奖品3 | 3 | 0 | 0 |
| 奖品1 | 1 | 0.1 | 1 |
| 奖品2 | 2 | 0.234 | 2.345 |
| 未中奖 | 4 | 0.6655 | 6.655 |
4、划分每个奖品的落点范围( range_min , rang_max ],左开右闭
落点范围:
range_min = 上个奖品的 range_max
range_max = range_min + weight
| type | id | rate | weight | range_min | rang_max |
|---|---|---|---|---|---|
| 奖品3 | 3 | 0 | 0 | 0 | 0 |
| 奖品1 | 1 | 0.1 | 1 | 0 | 1 |
| 奖品2 | 2 | 0.234 | 2.345 | 1 | 3.345 |
| 未中奖 | 4 | 0.6655 | 6.655 | 3.345 | 10 |
5、找出落点范围小数点精确位数最多的奖品,并取出精确位数( max_float_length )
| type | id | rate | weight | range_min | rang_max |
|---|---|---|---|---|---|
| 奖品2 | 2 | 0.234 | 2.345 | 1 | 3.345 |
| 未中奖 | 4 | 0.6655 | 6.655 | 3.345 | 10 |
max_float_length = 3.345,即精确位数为小数点后 3 位
6、生成随机小数的落点
随机小数范围 = rand(1 , max(range_max) * pow(10, max_float_length)) / pow(10, max_float_length)
7、判断随机小数落在哪个奖品的范围
若随机小数 = 2.175 ,即落在奖品2!
CodeIgniter-Lottery - php ci 抽奖辅助函数的更多相关文章
- ***CI查询辅助函数:insert_id()、affected_rows()
查询辅助函数 $this->db->insert_id() 这个ID号是执行数据插入时的ID. $this->db->affected_rows() Displays the ...
- CI URL 辅助函数 url helper
URL 辅助函数文件包含一些在处理 URL 中很有用的函数 加载辅助函数 本辅助函数通过如下代码加载: $this->load->helper('url'); 可用函数如下: site_u ...
- ci框架——辅助函数
辅助函数:application/helper下面.命名要求为***_helper.php;这样在调用的时候直接$this->load->helper('***');若想给自定义的辅助函数 ...
- CI框架篇之辅助函数篇--基本(1)
辅助函数 每个辅助函数文件仅仅是一些函数的集合URL Helpers 可以帮助我们创建链接, Form Helpers 可以帮助我们创建表单,Text Helpers 提供一系列的格式化输出方式, C ...
- CI 学习笔记、记录
[ci框架]ci框架目录结构分析 分类: [CodeIgniter深入研究]2013-05-09 00:24 7420人阅读 评论(5) 收藏 举报 [php] view plaincopy mysh ...
- 第一天ci框架开发商城2
ci框架开发商城2 1/28/2016 9:45:52 PM mvc完整案例 mvc完成新闻的增删改查 news控制器news.php class News extends CI_controller ...
- codeigniter文件上传问题
codeigniter自带的文件下载辅助函数非常简单实用,但是在处理大文件的时候,就显得捉襟见肘. 在网上找到了一个对download_helper.php文件的扩展,非常好用,记录下,遇到相同问题的 ...
- 使用 CodeIgniter 框架快速开发 PHP 应用(二)
原文:使用 CodeIgniter 框架快速开发 PHP 应用(二) 二分钟: 建立一个 CodeIgniter 网站用CI建一个网站很容易. 这一章很短,解释了用CI制作网站时发生了些什么,哪些文件 ...
- 使用 CodeIgniter 框架快速开发 PHP 应用(三)
原文:使用 CodeIgniter 框架快速开发 PHP 应用(三) 分析网站结构既然我们已经安装 CI ,我们开始了解它如何工作.读者已经知道 CI 实现了MVC式样. 通过对目录和文件的内容进行分 ...
随机推荐
- 启动项目的时候报驱动错误: not support oracle driver 1.0
问题:今天在使用pom导入oracle14的包时候发现怎么都下载不过来.网上查了一下发现是因为Oracle驱动需要官方授权,所以在pom.xml文件直接配置,无法下载成功. 解决方法就是下载oracl ...
- MySQL数据表range分区例子
某些行业数据量的增长速度极快,随着数据库中数据量的急速膨胀,数据库的插入和查询效率越来越低.此时,除了程序代码和查询语句外,还得在数据库的结构上做点更改:在一个主读辅写的数据库中,当数据表数据超过10 ...
- 使用Aspose.Cells读取Excel
最新更新请访问: http://denghejun.github.io Aspose.Cells读取Excel非常方便,以下是一个简单的实现读取和导出Excel的操作类: 以下是Aspose.Ce ...
- 如何创建一个Edge 浏览器扩展
随着微软Windows 10 年度更新的发布,数次延宕的Edge 扩展功能终于得到了官方正式支持.我在我的另外一个博客上发布了如何创建一个Edge 浏览器扩展的博文,链接如下: https://blo ...
- centos执行yum出现Could not retrieve mirrorlist错误
具体错误见截图 刚开始以为是DNS配置错误,经检查发现DNS与物理机的DNS配置是一样的,物理机可以解析DNS 搜索资料发现是/etc/nsswitch.conf这个文件的问题 这个文件hosts标签 ...
- 1035-Spell checker(模糊匹配)
一,题意: 给出一组字典的单词,以'#'结束,之后给出一组要执行模糊匹配的单词序列,以'#'结束 1,若某个单词能在字典中找到,则输出corret 2,若某个单词能通过 变换 或 删除 或 添加一个字 ...
- SQL Server出现错误: 4014
SQL Server出现错误: 4014 线下的测试机器老是报错,从errorlog里看到大量的4014错误 A fatal error occurred , output error: ). 错误: ...
- 全新 Mac 安装指南(通用篇)(推荐设置、软件安装、推荐软件)
注:本文将会不定期维护与更新,有需要的朋友请在 Github 上订阅该条 Issues:<全新 Mac 安装指南(通用篇)>. 在 Mac 电脑上只用 Windows 操作系统的同学请看到 ...
- 关于大型网站技术演进的思考(十九)--网站静态化处理—web前端优化—上(11)
网站静态化处理这个系列马上就要结束了,今天我要讲讲本系列最后一个重要的主题web前端优化.在开始谈论本主题之前,我想问大家一个问题,网站静态化处理技术到底是应该归属于web服务端的技术范畴还是应该归属 ...
- TODO:小程序的春天你想做什么
TODO:小程序的春天你想做什么 微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 初步了解小程序的特点 导航明确,来去自如 统一稳定, 视觉规范 ...