通过后台进行设置奖项的概率,数量,实现随机抽奖的效果。下面只是用了一个示例数据进行模拟
/**
* 随机中奖
*
* 1、将奖品列表传入
* 2、遍历奖品列表数据,获取其id,概率
* 3、计算概率,随机选出id
* 4、根据id,返回信息
*
*/
public function prize(){
$res = [
['prize_class'=>0,'prize_name'=>'谢谢参与','prize_rank'=>1000],
['prize_class'=>1,'prize_name'=>'三等奖','prize_rank'=>100],
['prize_class'=>2,'prize_name'=>'二等奖','prize_rank'=>10],
['prize_class'=>3,'prize_name'=>'一等奖','prize_rank'=>1],
];
$finds = ['prize_class','prize_name','prize_rank'];
foreach ($res as $key=>$val){
//array(4) { [0]=> int(1000) [1]=> int(100) [2]=> int(10) [3]=> int(1) }
$arr[$val[$finds[0]]] = $val[$finds[2]];
}
$id = $this->get_rand($arr);
$prizeRes = $res[$id];
var_dump($prizeRes);
}
/**
* 计算概率,返回id
*/
public function get_rand($arr){
$proSum = array_sum($arr);//概率总和
if($proSum === 0 ){
return $proSum;
}
foreach ($arr as $key=>$val){
$randNum = mt_rand(1, $proSum);
if ($randNum <= $val) {
$result = $key;
break;
} else {
$proSum -= $val;
}
}
unset($arr);
return $result;
}
转载请注明原文地址: https://ju.6miu.com/read-39350.html