| 随机输出“苹果”,“橘子”,“香蕉”要求输出“苹果”的概率为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}];
 ?
 |