飞嗨,欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。(本博已于2015.12.6升级到php7,运行环境php7 php-fpm + nginx1.8.0)

php写的小抽奖类

PHP lf 2307℃ 0评论

这个按概率产生的中奖项,还是蛮巧妙的,搭配jqueryRotare就可以成抽奖大转盘啦。抽奖,产生一个随机数不难,难点在于,要控制概率,并且,无论如何,指针要停下来,及要产生一个中奖项…之前我在公司做的:http://www.yesvion.com/birthday

 

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();
?>

转载请注明:飞嗨 » php写的小抽奖类

喜欢 (2)or分享 (0)

Warning: Use of undefined constant PRC - assumed 'PRC' (this will throw an Error in a future version of PHP) in /work/php/blog/wp-content/themes/yusi1.0/comments.php on line 17
发表我的评论
取消评论

表情
粤ICP备15018643号-1