Hi,为确保您的账号安全,请大家修改登陆密码为包含大小写字母、标点、数字的复合密码,不要使用过于简单的登陆密码。
您当前的位置:首页 :: PHP

抽奖计算算法核心

时间:2016-10-03 12:31:42  来源:  作者:

 今天直接上两有关抽奖的算法,

 
在抽奖如大转盘,刮刮卡等,都会用到抽奖的算法,下面我贴个,直接上代码:
 
 
$rate = 1; //概率
foreach ($prizes as $k => $v) {
    if($v['num'] - $v['draw_num']<=0){
        continue;
    }
    if(empty($v['rate'])){
        continue;
    }
    if ($v['rate'] < 1) {
        $temp = explode('.', $v['rate']);
        $temp = pow(10, strlen($temp[1]));
        $rate = $temp < $rate ? $rate : $temp;
        $v['rate'] = $v['rate'] * $rate;
    }
    $prizearr[] =$v;
}

$all = 100 * $rate;
mt_srand((double) microtime() * 1000000);
$rand = mt_rand(1, $all);
foreach ($prizearr as $k => $v) {
    if($rand>0 && $rand<= $v['rate'] && $v['num']>0){
        $awards[] = $v['id'];
    }
}

if(count($awards)>0){
    mt_srand((double) microtime() * 1000000);
    $randid = mt_rand(0, count($awards)-1);
    $randid = $awards[$randid];
    foreach ($prizes as $k => $v) {
        if($v['id']==$randid){
            $gif = $v;
            $gif['level'] = $k+1;
            break;
        }
    }
}
 
 
大该说一下上面的思路,首先是过虑或确定奖项信息,判断是不是该奖项的数量或该率是不是为0
再一个就是确定奖项设置的参数 如果概率设置为小数那么就除100来计算 一位小数就是千分位 两位就是万分位
小于100的整数就是百分位,大于100会按100来算,满足一般的要求
举报
收藏0次 / 评论0
评论(0)
还可以输入 2000 个字符
还可以输入 2000 个字符
取消回复
举报×

还可以输入 264 字符

收藏(0)×