php随机抽奖实例分析


Posted in PHP onMarch 04, 2015

本文实例讲述了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) || empty(self::$awardsArr)) {

            return self::$checkAward = false;

        }

        self::$proSum = 0;

        foreach (self::$awardsArr as $_key => $award) {

            self::$proSum += $award[self::$proField];

        }

        if (empty(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 (!empty($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

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
php 404错误页面实现代码
Jun 22 PHP
zen cart新进商品的随机排序修改方法
Sep 10 PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 PHP
php中get_defined_constants函数用法实例分析
May 12 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
Dec 01 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
php微信支付之公众号支付功能
May 30 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 PHP
如何通过Apache在本地配置多个虚拟主机
Jul 29 PHP
PHP序列化和反序列化深度剖析实例讲解
Dec 29 PHP
php二维数组合并及去重复的方法
Mar 04 #PHP
php中get_cfg_var()和ini_get()的用法及区别
Mar 04 #PHP
php用ini_get获取php.ini里变量值的方法
Mar 04 #PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 #PHP
php查询mysql大量数据造成内存不足的解决方法
Mar 04 #PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
Mar 03 #PHP
PHP获取POST数据的几种方法汇总
Mar 03 #PHP
You might like
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
PHP 文件扩展名 获取函数
2009/06/03 PHP
PHP编程函数安全篇
2013/01/08 PHP
php实现的漂亮分页方法
2014/04/17 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
Prototype String对象 学习
2009/07/19 Javascript
js类式继承的具体实现方法
2013/12/31 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
JS实现1000以内被3或5整除的数字之和
2016/02/18 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
详解Python中 __get__和__getattr__和__getattribute__的区别
2016/06/16 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
Python标准库shutil用法实例详解
2018/08/13 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
python实现名片管理系统
2018/11/29 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
Python面向对象实现方法总结
2020/08/12 Python
python从PDF中提取数据的示例
2020/10/30 Python
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
互动出版网:专业书籍
2017/03/21 全球购物
师范毕业生自我鉴定
2014/01/15 职场文书
采购经理岗位职责
2014/02/16 职场文书
医院节能减排方案
2014/06/13 职场文书
婚礼新人答谢词
2015/01/04 职场文书
意向协议书
2015/01/27 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
董存瑞观后感
2015/06/11 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS