CodeIgniter-Lottery - php ci 抽奖辅助函数

Github

https://github.com/xjnotxj/CodeIgniter-Lottery

用法

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 抽奖辅助函数的更多相关文章

  1. ***CI查询辅助函数:insert_id()、affected_rows()

    查询辅助函数 $this->db->insert_id() 这个ID号是执行数据插入时的ID. $this->db->affected_rows() Displays the ...

  2. CI URL 辅助函数 url helper

    URL 辅助函数文件包含一些在处理 URL 中很有用的函数 加载辅助函数 本辅助函数通过如下代码加载: $this->load->helper('url'); 可用函数如下: site_u ...

  3. ci框架——辅助函数

    辅助函数:application/helper下面.命名要求为***_helper.php;这样在调用的时候直接$this->load->helper('***');若想给自定义的辅助函数 ...

  4. CI框架篇之辅助函数篇--基本(1)

    辅助函数 每个辅助函数文件仅仅是一些函数的集合URL Helpers 可以帮助我们创建链接, Form Helpers 可以帮助我们创建表单,Text Helpers 提供一系列的格式化输出方式, C ...

  5. CI 学习笔记、记录

    [ci框架]ci框架目录结构分析 分类: [CodeIgniter深入研究]2013-05-09 00:24 7420人阅读 评论(5) 收藏 举报 [php] view plaincopy mysh ...

  6. 第一天ci框架开发商城2

    ci框架开发商城2 1/28/2016 9:45:52 PM mvc完整案例 mvc完成新闻的增删改查 news控制器news.php class News extends CI_controller ...

  7. codeigniter文件上传问题

    codeigniter自带的文件下载辅助函数非常简单实用,但是在处理大文件的时候,就显得捉襟见肘. 在网上找到了一个对download_helper.php文件的扩展,非常好用,记录下,遇到相同问题的 ...

  8. 使用 CodeIgniter 框架快速开发 PHP 应用(二)

    原文:使用 CodeIgniter 框架快速开发 PHP 应用(二) 二分钟: 建立一个 CodeIgniter 网站用CI建一个网站很容易. 这一章很短,解释了用CI制作网站时发生了些什么,哪些文件 ...

  9. 使用 CodeIgniter 框架快速开发 PHP 应用(三)

    原文:使用 CodeIgniter 框架快速开发 PHP 应用(三) 分析网站结构既然我们已经安装 CI ,我们开始了解它如何工作.读者已经知道 CI 实现了MVC式样. 通过对目录和文件的内容进行分 ...

随机推荐

  1. linux配置ftp高级权限

    建一个用于管理的ftp高级账号,ftproot,定义它的目录,也就是我们存放项目的地址,所属组www, useradd -d /home/www -g www ftproot www里存放很多项目,我 ...

  2. HDU2818 并查集

    Building Block Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. web图片识别

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  4. android——自定义listView

    都知道微信主机面 有个界面会一行一一行的聊天记录,那个效果就可以用listview来实现(当然这只是其中的一种) listView是一种比较常见的组件它用来展示列的view,它是根据数据的长度来显示数 ...

  5. asp.net[web.config] httphandlers 与实现自由定义访问地址

    今天一起来看一个简单的例子,主要是用来实现一个映射功能,我们一般访问一个网址的时候比如是这样的http://localhost:6166/WebSite1/api/request.aspx?strte ...

  6. sql编写将时间转换年月日 时分格式

    SELECT SUBSTRING(CONVERT(varchar(100),时间字段, 22),0,15) AS aa  FROM  表名

  7. Excel VBA 函数

    Instr函数 一. 定义 InStr 函数 返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置. InStr([start, ]string1, string2[, com ...

  8. Asp.Net MVC 分页、检索、排序整体实现

    很多时候需要这样的功能,对表格进行分页.排序和检索.这个有很多实现的方式,有现成的表格控件.用前端的mvvm,用户控件.但很多时候看着很漂亮的东西你想进一步控制的时候却不那么如意.这里自己实现一次,功 ...

  9. 毫秒级的时间处理上G的图片(生成缩略图)

    测试环境: 测试图片(30M): 测试计时方法: Stopwatch sw1 = new Stopwatch(); sw1.Start(); //TODO...... sw1.Stop(); stri ...

  10. Step by step Dynamics CRM 2011升级到Dynamics CRM 2013

    原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...