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 向访客和爬虫显示不同的内容
Nov 09 PHP
PHP基础学习之流程控制的实现分析
Apr 28 PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 PHP
PHP生成随机密码类分享
Jun 25 PHP
linux下安装php的memcached客户端
Aug 03 PHP
php绘制一条直线的方法
Jan 24 PHP
php在apache环境下实现gzip配置方法
Apr 02 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
Mar 07 PHP
mysql alter table命令修改表结构实例详解
Sep 24 PHP
PHP INT类型在内存中占字节详解
Jul 20 PHP
Laravel实现搜索的时候分页并携带参数
Oct 15 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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
PHP+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
JavaScript 学习笔记二 字符串拼接
2010/03/28 Javascript
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
React Native时间转换格式工具类分享
2017/10/24 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
2017/12/26 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
用Python配平化学方程式的方法
2019/07/20 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
2020/05/15 Python
python用分数表示矩阵的方法实例
2021/01/11 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
html5使用canvas绘制一张图片
2014/12/15 HTML / CSS
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
写给女生的道歉信
2014/01/14 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
python 算法题——快乐数的多种解法
2021/05/27 Python
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python