php中奖概率算法,可用于大转盘、九宫格、翻牌、刮刮卡等抽奖算法

public function test_prive(){
   
   $prize_arr = array(
      array('id'=>'1','name'=>'奖品1','lv'=>'10'),
      array('id'=>'2','name'=>'奖品2','lv'=>'20'),
      array('id'=>'3','name'=>'奖品3','lv'=>'30'),
      array('id'=>'4','name'=>'奖品4','lv'=>'10'),
      array('id'=>'5','name'=>'奖品5','lv'=>'10'),
      array('id'=>'6','name'=>'奖品6','lv'=>'20'),
   );
   $pr_arr = array_column($prize_arr,'lv');
   $count_num = array_sum($pr_arr);
   $rkay = mt_rand(1,$count_num);
   echo "<pre>";
   print_r($pr_arr);
   echo $count_num."<br>";
   echo $rkay."<br>";
   $num = 0;
   foreach($pr_arr as $k=>$v){
      if($rkay > $num+$v){
         $num += $v;
      }else{
         $key = $k;
         break;
      }
   }
   echo $key;
}

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值