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 Token(令牌)设计
Mar 15 PHP
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 PHP
php使用ICQ网关发送手机短信
Oct 30 PHP
codeigniter框架批量插入数据
Jan 09 PHP
windows下配置php5.5开发环境及开发扩展
Dec 25 PHP
php获取Google机器人访问足迹的方法
Apr 15 PHP
百度地图API使用方法详解
Aug 25 PHP
thinkPHP自定义类实现方法详解
Nov 30 PHP
PHP提取字符串中的手机号正则表达式怎么写
Jul 17 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
PHP cookie与session会话基本用法实例分析
Nov 18 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 skymvc 一款轻量、简单的php
2011/06/28 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
php中session与cookie的比较
2015/01/27 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
php图像验证码生成代码
2017/06/08 PHP
js函数的延迟加载实现代码
2012/10/11 Javascript
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
手机端页面rem宽度自适应脚本
2015/05/20 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
jQuery实现的两种简单弹窗效果示例
2018/04/18 jQuery
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
python生成指定长度的随机数密码
2014/01/23 Python
Python深入学习之装饰器
2014/08/31 Python
Python迭代用法实例教程
2014/09/08 Python
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
Python中print和return的作用及区别解析
2019/05/05 Python
Python基于OpenCV实现人脸检测并保存
2019/07/23 Python
Python 如何提高元组的可读性
2019/08/26 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
CSS3 实现雷达扫描图的示例代码
2020/09/21 HTML / CSS
一个精品风格的世界:Atterley
2019/05/01 全球购物
实习单位推荐信范文
2013/11/27 职场文书
思想专业自荐信范文
2013/12/25 职场文书
国庆节标语大全
2014/10/08 职场文书
西游降魔篇观后感
2015/06/15 职场文书
银行工作心得体会范文
2016/01/23 职场文书