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 中的str_replace 函数总结
Apr 27 PHP
PHP时间戳与日期之间转换的实例介绍
Apr 19 PHP
ThinkPHP模板比较标签用法详解
Jun 30 PHP
php中函数前加&amp;符号的作用分解
Jul 08 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
Dec 22 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
Nov 03 PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
Jan 29 PHP
php支付宝系列之电脑网站支付
May 30 PHP
PHP后台实现微信小程序登录
Aug 03 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的历史和优缺点
2006/10/09 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
深入解析PHP的引用计数机制
2013/06/14 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
彻底搞懂PHP 变量结构体
2017/10/11 PHP
常用js脚本
2006/12/03 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
jquery交替变换颜色的三种方法 实例代码
2013/11/19 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
2017/03/21 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
JavaScript进阶(一)变量声明提升实例分析
2020/05/09 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
[02:22]2018DOTA2亚洲邀请赛VG赛前采访
2018/04/03 DOTA
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
python生成器表达式和列表解析
2016/03/10 Python
python使用str &amp; repr转换字符串
2016/10/13 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
python素数筛选法浅析
2018/03/19 Python
python re模块的高级用法详解
2018/06/06 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
python中pdb模块实例用法
2021/01/15 Python
纽约服装和生活方式品牌:Saturdays NYC
2017/08/13 全球购物
精致的手工皮鞋:Shoe Embassy
2019/11/08 全球购物
美国留学经济担保书
2014/05/20 职场文书
南京导游词
2015/02/03 职场文书
恰同学少年观后感
2015/06/08 职场文书
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏