<?php function get_rand($proArr) { $result = ''; //概率数组的总概率精度 $proSum = array_sum($proArr); //概率数组循环 foreach ($proArr as $key => $proCur) { $randNum = mt_rand(1, $proSum); if ($randNum <= $proCur) { $result = $key; break; } else { $proSum -= $proCur; } } unset ($proArr); return $result; } $prize_arr = array( '0' => array('id'=>1,'name'=>"ipad",'probability'=>1,'img'=>'','intro'=>''), '1' => array('id'=>2,'name'=>"carema",'probability'=>5,'img'=>'','intro'=>''), '2' => array('id'=>3,'name'=>"ipod",'probability'=>30,'img'=>'','intro'=>''), '3' => array('id'=>4,'name'=>"4GTF",'probability'=>2,'img'=>'','intro'=>''), '4' => array('id'=>5,'name'=>"10QB",'probability'=>12,'img'=>'','intro'=>''), '5' => array('id'=>6,'name'=>"No prize!",'probability'=>50,'img'=>'','intro'=>''), ); foreach ($prize_arr as $key => $val) { $arr[$val['id']] = $val['probability']; } $rid = get_rand($arr); //根据概率获取奖项id $res['yes'] = $prize_arr[$rid-1]; //中奖项 //将中奖项从数组中剔除,剩下未中奖项,如果是数据库验证,这里可以省掉 unset($prize_arr[$rid-1]); shuffle($prize_arr); //打乱数组顺序 for($i=0;$i<count($prize_arr);$i++){ $pr[] = $prize_arr[$i]; } $res['no'] = $pr; var_dump($res);
PHP概率抽奖实现
猜你喜欢
转载自blog.csdn.net/panco_/article/details/89738950
今日推荐
周排行