1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > php 随机几率 php实现根据概率配置随机抽奖

php 随机几率 php实现根据概率配置随机抽奖

时间:2022-07-04 03:32:08

相关推荐

php 随机几率 php实现根据概率配置随机抽奖

这是我写的一个比较简单的抽奖算法,并没有很严谨,用于我自己写的wap文字游戏(美味小镇)上的随机食材,可以设定概率值

/**

*CreatedbyPhpStorm.

*User:tioncico

*Date:/12/90009

*Time:14:50

*/

classRand

{

public$arr,$not_id,$if_repeat,$odds;

publicfunction__construct($arr,$if_repeat=1)

{

$this->arr=$arr;

$this->if_repeat=$if_repeat;

$this->get_odds_array();

}

functionaction($num=1)

{

if(!$this->arr||!$this->odds){

returnfalse;

}

$ids=array();

for($i=0;$i

$res=$this->get_rand($this->arr,$this->odds);

if($this->if_repeat==0){

if(count($this->arr)<=count($ids)){

return$ids;

}

if(in_array($res,$ids)){

$i--;

}else{

$ids[]=$res;

}

}else{

$ids[]=$res;

}

}

return$ids;

}

publicfunctionget_odds_array($arr=array())

{

$arr||$arr=$this->arr;

foreach($arras$k=>$va){

if(empty($va['odds'])){

$va['odds']=100;

}

$odds[$k]=$va['odds'];

}

$this->odds=array_sum($odds);

return$this;

}

publicfunctionadd_arr($arr=array()){

$this->arr=array_merge($this->arr,$arr);

return$this;

}

functionremove_id($arr=array(),$not_id=array()){

$arr||$arr=$this->arr;

$not_id||$not_id=$this->not_id;

if(empty($not_id)){

$this->arr=$arr;

return$this;

}

foreach($arras$k=>$va){

foreach($not_idas$vo){

if($k==$vo){

unset($arr[$k]);

}

}

}

$this->arr=$arr;

return$this;

}

//返回概率

functionget_rand($arr=array(),$odds=0)

{

$arr||$arr=$this->arr;

$odds||$odds=$this->odds;

//概率数组循环

$randNum=mt_rand(1,$odds);

$odd_num=0;

foreach($arras$key=>$va){

if($randNum>$odd_num&&$randNum<=$va['odds']+$odd_num){

return$arr[$key];

break;

}else{

$odd_num+=$va['odds'];

}

}

unset($proArr);

}

}

$arr=array(

array(

'id'=>1,

'odds'=>100//相对概率值

),

array(

'id'=>2,

'odds'=>10//相对概率值

),

array(

'id'=>3,

'odds'=>200//相对概率值

),

)

调用方法

$a=newRand($arr);

$a->action(1);

本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。