抽奖概率算法
来自代码库
101.81.252.233(讨论)2017年5月5日 (五) 08:35的版本 (创建页面,内容为“ →* * @desc 抽奖概率算法 - 生成品类 * @author * @date: private function lotteryWeight($data) { if(!$data...”)
/** * @desc 抽奖概率算法 - 生成品类 * @author * @date */ private function lotteryWeight($data) { if(!$data || !count($data)){ return false; }
$item = []; $code = ; //每个奖品的中奖几率,奖品ID作为数组下标 foreach($data as $k => $v){ $item[$v['id']] = $v['weight']; }
//中奖概率基数 $num = array_sum($item);
foreach($item as $k => $v){ //获取一个1到当前基数范围的随机数 阶段性权重值 $rand = mt_rand(1,$num); if($rand <= $v){ //dump($rand .'-------'.$v); $code = $k; break; }else{ $num -= $v; //末等奖必中 } }
if(!$code){ return false; }
return $code; }
$data = array(
array('id'=>1,'name'=>'一等奖','weight'=>1), array('id'=>2,'name'=>'二等奖','weight'=>4), array('id'=>3,'name'=>'三等奖','weight'=>15), array('id'=>4,'name'=>'四等奖','weight'=>30), array('id'=>5,'name'=>'没中奖','weight'=>50) );
//抽取奖品 $code = $this->lotteryWeight($data);