php随机抽奖实例分析
发布:smiling 来源: PHP粉丝网 添加日期:2021-05-15 15:31:14 浏览: 评论:0
这篇文章主要介绍了php随机抽奖实现方法,实例分析了php抽奖类lottery_tool及其具体使用技巧,需要的朋友可以参考下
本文实例讲述了php随机抽奖用法,分享给大家供大家参考,具体分析如下:
1. 按照设定的概率,得到随机抽奖的结果,代码如下:
- <?php
- /**
- * 抽奖工具
- */
- class lottery_tool {
- protected static $awardsArr;
- protected static $proField = 'probability';
- protected static $proSum = 0;
- protected static $checkAward = false;
- const SUCCESS_CODE = 0;
- const FAIL_CODE = -1;
- //检查抽奖数据
- protected static function checkAwards(){
- if (!is_array(self::$awardsArr) || emptyempty(self::$awardsArr)) {
- return self::$checkAward = false;
- }
- self::$proSum = 0;
- foreach (self::$awardsArr as $_key => $award) {
- self::$proSum += $award[self::$proField];
- }
- if (emptyempty(self::$proSum)) {
- return self::$checkAward = false;
- }
- return self::$checkAward = true;
- }
- protected static function successRoll($rollKey){
- return array('code' => self::SUCCESS_CODE, 'roll_key' => $rollKey, 'msg' => 'roll success');
- }
- protected static function failRoll($msg = 'roll fail'){
- return array('code' => self::FAIL_CODE, 'msg' => $msg );
- }
- //抽奖
- public static function roll () {
- if (false == self::$checkAward) {
- return self::failRoll('awards data is not the right format!');
- }
- $result = mt_rand(0, self::$proSum);
- $proValue = 0;
- foreach (self::$awardsArr as $_key => $value) {
- $proValue += $value[self::$proField];
- if ($result <= $proValue) {
- return self::successRoll($_key);
- }
- }
- return self::failRoll('wrong');
- }
- //改变概率字段名
- public static function setProField($field = null) {
- if (!emptyempty($field)) {
- self::$proField = $field;
- }
- }
- //设置奖品
- public static function setAwards($awards){
- self::$awardsArr = $awards;
- self::checkAwards();
- }
- }
2. 示例代码:
- $awards = array(
- '0' => array('pro' => 15, 'info' => '15%的可能性'),
- '1' => array('pro' => 25, 'info' => '25%的可能性'),
- '2' => array('pro' => 40, 'info' => '40%的可能性'),
- '3' => array('pro' => 20, 'info' => '20%的可能性'),
- );
- lottery_tool::setProField('pro');
- lottery_tool::setAwards($awards);
- $result = array();
- for ($i = 10000; $i --;) {
- $result[] = lottery_tool::roll();
- }
- foreach ($result as $key => $value) {
- $awards[$value['roll_key']]['num'] ++;
- }
- echo '<pre>';
- var_dump($awards);
运行结果如下:
- array
- 0 =>
- array
- 'pro' => int 15
- 'info' => string '15%的可能性' (length=15)
- 'num' => int 1596
- 1 =>
- array
- 'pro' => int 25
- 'info' => string '25%的可能性' (length=15)
- 'num' => int 2484
- 2 =>
- array
- 'pro' => int 40
- 'info' => string '40%的可能性' (length=15)
- 'num' => int 3939
- 3 =>
- array
- 'pro' => int 20
- 'info' => string '20%的可能性' (length=15)
- 'num' => int 1981
Tags: php随机抽奖
相关文章
- ·基于PHP实现简单的随机抽奖小程序(2021-07-03)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)