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 相关文章推荐
PHP5中MVC结构学习
Oct 09 PHP
学习使用PHP数组
Oct 09 PHP
基于PHP与XML的PDF文档生成技术
Oct 09 PHP
php stream_get_meta_data返回值
Sep 29 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
Jan 14 PHP
PHP图片自动裁切应付不同尺寸的显示
Oct 16 PHP
php在apache环境下实现gzip配置方法
Apr 02 PHP
php递归遍历删除文件的方法
Apr 17 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
Dec 18 PHP
php实现的debug log日志操作类实例
Jul 12 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
PHP闭包定义与使用简单示例
Apr 13 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自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
PHP反转字符串函数strrev()函数的用法
2012/02/04 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
JS 文件传参及处理技巧分析
2010/05/13 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
简单实现js浮动框
2016/12/13 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
JS基于正则表达式的替换操作(replace)用法示例
2017/04/28 Javascript
vue2.X组件学习心得(新手必看篇)
2017/07/05 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
小程序实现分类页
2019/07/12 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
粉红色的鲸鱼:Vineyard Vines
2018/02/17 全球购物
医学生实习自荐信
2013/10/01 职场文书
银行办理业务介绍信
2014/01/18 职场文书
质量负责人任命书
2014/06/06 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
导游词之山西关帝庙
2019/11/01 职场文书
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL