php写的小抽奖类

 

lottery.class.php

lottery.class.php

首先,实例化的时候,接收一个概率数

抽奖

抽奖

组,数组的总和为分母,每一个值为分子。然后调用对象中的getRand()方法,产生中奖项。我这里传了一个关联数组,按概率随机返回关联数组的键值,即为中奖项。
getRand()方法,首相对数组求和,得到$sum,然后遍历概率数组,每一次遍历数组,从1,数组和之间产生一个随机数,如果随机数小于等于此次遍历出来的数组键值,即为中奖项,exit。否则,把数组和减去当前遍历的数组键值。数组之和,每遍历一次,只要没中奖即在减小,直到变成0,遍历概率数组,前面所有次数都没有中奖的情况下,最后一次产生的随机数是从1-0中产生,它一定会小于最后一个概率的分子。所以,无论如何,总是会保证有一个中奖项。

 

 

 

lucky.class.php

probability = $probability;
}
public function getRand()
{
$sum = array_sum($this -> probability);
foreach($this -> probability as $k => $v){
$rand = mt_rand(1,$sum);
if($rand <= $v) { $return = $k; break; }else{ $sum -= $v; } } return $return; } } ?>

 

 

lucky.php

10,'b'=>20,'c'=>30,'d'=>40);
$lucky = new lottery($arr);
echo date('Y-m-d H:i:s').'
';
echo $lucky -> getRand();
?>

评论

目前评论:0   

点击加载更多评