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后台多用户权限组思路与实现程序代码分享
Feb 13 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
Jul 01 PHP
ThinkPHP分页实例
Oct 15 PHP
php单例模式示例分享
Feb 12 PHP
Codeigniter的dom类用法实例
Jun 26 PHP
PHP获取某个月最大天数(最后一天)的方法
Jul 29 PHP
php采集神器cURL使用方法详解
Feb 19 PHP
Json_encode防止汉字转义成unicode的方法
Feb 25 PHP
php parse_str() 函数的定义和用法
May 23 PHP
php出租房数据管理及搜索页面
May 23 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 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
如何在PHP中使用Oracle数据库(3)
2006/10/09 PHP
PHP 翻页 实例代码
2009/08/07 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
thinkPHP实现表单自动验证
2014/12/24 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
PHP chop()函数讲解
2019/02/11 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
window.open()弹出居中的窗口
2007/02/01 Javascript
JavaScript中判断原生函数检查function是否是原生代码
2014/09/09 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
Python struct模块解析
2014/06/12 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
python自动点赞功能的实现思路
2020/02/26 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
大学本科毕业生求职信范文
2013/12/18 职场文书
简单租房协议书
2014/04/09 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
2014年检验科工作总结
2014/11/22 职场文书
公务员政审材料范文
2014/12/23 职场文书
安全保证书怎么写
2015/02/28 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
爱国主义教育主题班会
2015/08/13 职场文书