抽奖表
rand
id | 抽奖名称 | 总数量 |
---|---|---|
21 | 计划一 | 5000 |
抽奖配置表
rand_config
rand_id | 奖项 | 份数 | 已售出 |
---|---|---|---|
21 | A商品 | 500 | 0 |
21 | B商品 | 1500 | 0 |
21 | C商品 | 3000 | 0 |
整体思路如下:
1,计算出概率
ceil()//php中代表向上取整
A = ceil(500/5000*10) 值为"1"
B = ceil(1500/5000*10) 值为"3"
C = ceil(3000/5000*10) 值为"6"
2,生成数组
$arr = [
'0'=>'A',
'1'=>'B',
'2'=>'B',
'3'=>'B',
'4'=>'C',
'5'=>'C',
'6'=>'C',
'7'=>'C',
'8'=>'C',
'9'=>'C'
];
3,使用array_rand()函数,随机筛选出id,即代表用户抽出此商品
代码实现:
$sql = Db::name('rand_config')->where('rand_id','21')->select();
$num = Db::name('rand')->where('id','21')->value('总数量');
$arr = [];
foreach ($sql as $v){
//判断如果售出达到限制的份数,跳出循环,执行下一个
if ($v['已售出']>=$v['份数']){
continue;
}
for($i=0;$i<(ceil(($v['份数']/$num*10)));$i++){
$arr[] = $v['rand_id '];
};
$all+=$v['已售出'];
}
$usGetWhich = array_rand($arr);
//下面执行入库操作,销量+1,获得的奖品入库。