简单的抽奖function

  由于项目需要,写了个简单的抽奖,根据rand随机数取得抽奖区间,然后再根据各个奖品的抽奖概率判断这个随机数是否在这个奖品区间内。

  

/**
* 抽奖函数
* 思路:先确定随机数是否大于奖品概率和,大于则不中奖,小于之后,则根据随机函数的数字区间,然后在遍历每条奖品的概率看是否在此区间内,确实抽中哪个奖品
* @param $sum[0]['chance'] 抽奖得奖总概率
* @param $luck_num 你的抽奖码
* @param $luck 得奖区间
* @param $size 小数点后位数
* $param $max
* $max=10,概率*10,$max=100,则*100
*/
public function luck(){
// 获取各个产品的中奖概率
$data=$this->db->select('*')->get('prize')->result_array();
// 判断奖品概率的小数点
$size=0;
foreach ($data as $key => $value) {
$x=explode(".",$value['chance']);
if(isset($x[1])){
if($size<strlen($x[1])){
$size=strlen($x[1]);
}
}
}
$max=10;
for($i=0;$i<$size;$i++){
$max=$max*10;
}
// 奖品总中奖概率
$sum=$this->db->select_sum('chance')->get('prize')->result_array();
// 根据随机函数确定是否中奖
$luck_num=rand(1,($max*100));
if($luck_num>($sum[0]['chance']*$max)){
return array('status'=>0);
}else{
// 设置初设为0
$luck=0;
foreach ($data as $key => $value) {
// 使每个奖品的概率相加
$luck=$luck+($value['chance']*$max);
if($luck_num<=$luck){
return array('status'=>1,'id'=>$value['id'],'file'=>$value['file']);
break;
}
}
}
}

posted @ 2017-04-07 11:18  方方土zekeny  阅读(271)  评论(0编辑  收藏  举报