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,
)
);

注:

方法二:利用 $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、定义奖品,记得加上未中奖的情况

奖品110.1
奖品220.234
奖品330
未中奖40.6655

2、按照 rate (中奖概率)递增排序

奖品330
奖品110.1
奖品220.234
未中奖40.6655

3、取出除 0 以外的最小 rate:min_rate = 0.1,并计算每个奖品的权重值( weight )

奖品3300
奖品110.11
奖品220.2342.345
未中奖40.66556.655

4、划分每个奖品的落点范围( range_min , rang_max ],左开右闭

奖品330000
奖品110.1101
奖品220.2342.34513.345
未中奖40.66556.6553.34510

5、找出落点范围小数点精确位数最多的奖品,并取出精确位数( max_float_length )

奖品220.2342.34513.345
未中奖40.66556.6553.34510

6、生成随机小数的落点

7、判断随机小数落在哪个奖品的范围

04-13 15:17