作为程序员一定要保持良好的睡眠,才能好编程

PHP抽奖概率问题

发布时间:2019-03-14

很多时候,做活动需要抽奖游戏,

<?php


$prize_arr = array(
	'0' => array('id'=>1,'prize'=>'平板电脑','v'=>1),
	'1' => array('id'=>2,'prize'=>'数码相机','v'=>5),
	'2' => array('id'=>3,'prize'=>'音箱设备','v'=>10),
	'3' => array('id'=>4,'prize'=>'4G优盘','v'=>12),
	'4' => array('id'=>5,'prize'=>'10Q币','v'=>22),
	'5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>50)
);


shuffle($prize_arr);


$pcount=array_sum(array_column($prize_arr,'v'));

$result=null;

foreach($prize_arr as $key=>$val){

	$rand=mt_rand(1,$pcount);
	var_dump($rand);
	if($rand<=$val['v']){
		$result=$key;
		break;
	}else{
		$pcount-=$val['v'];
	}
}

var_dump($prize_arr[$result]);




代码实现:



$goods = array(
	'0' => array('id'=>1,'prize'=>'平板电脑','v'=>1),
	'1' => array('id'=>2,'prize'=>'数码相机','v'=>5),
	'2' => array('id'=>3,'prize'=>'音箱设备','v'=>10),
	'3' => array('id'=>4,'prize'=>'4G优盘','v'=>12),
	'4' => array('id'=>5,'prize'=>'10Q币','v'=>22),
	'5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>50)
);
$count=array_sum(array_column($goods,'odds'));


shuffle($goods);

$zhongjiang=null;


foreach($goods as $key=>$val){

    $zj=rand(1,$count);
    if($zj<=$val['odds']){
        $zhongjiang=$goods[$key];
        break;
    }else{
        $count-=$val['odds'];
    }
}





抽奖思路参考于:

https://www.helloweba.net/javascript/184.html


https://www.helloweba.net/tag/jiang.html