php 大转盘 抽奖概率算法

随机输出“苹果”,“橘子”,“香蕉”要求输出“苹果”的概率为50%,“橘子”的概率为30%,“香蕉”的概率为20%

1.第一种算法
function getRandom($pr){
    $temp = rand(0,array_sum($pr));
    $left = 0;
    $right = 0; 
    foreach ($pr as $k=>$v){
        $right+=$v; 
        if($left<=$temp && $temp<$right){
            return $k;
        }
        $left+=$v;
    }
}

//转盘抽奖数据
function getAwardData(){
    return [
        1=>['id'=>1,'pr'=>50],
        2=>['id'=>2,'pr'=>30],
        4=>['id'=>4,'pr'=>20], 
    ];
}


$awardData  = getAwardData(); //抽奖的数据
foreach ($awardData as $v){
    $pr[$v['id']] = $v['pr'];
}
$award_id =  getRandom($pr);
print_r('id:'.$award_id);

第二种

//str_shuffle来处理

$array=array('1'=>'苹果','2'=>'橘子','3'=>'香蕉');
$string="1111122233";
$key=str_shuffle($string);
echo $array[$key{0}];

 


版权声明:本文为liuxin_0725原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。