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 相关文章推荐
一个简单的MySQL数据浏览器
Oct 09 PHP
php自动适应范围的分页代码
Aug 05 PHP
php学习之数据类型之间的转换代码
May 29 PHP
php设计模式 Composite (组合模式)
Jun 26 PHP
php5.2以下版本无json_decode函数的解决方法
May 25 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
PHP简单获取及判断提交来源的方法
Apr 22 PHP
CodeIgniter生成静态页的方法
May 17 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
May 21 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
Sep 30 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 PHP
PHP xpath提取网页数据内容代码解析
Jul 16 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
PHP字符转义相关函数小结(php下的转义字符串)
2007/04/12 PHP
php结合表单实现一些简单功能的例子
2011/06/04 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
PHP正确解析UTF-8字符串技巧应用
2012/11/07 PHP
PHP实现关键字搜索后描红功能示例
2019/07/03 PHP
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
jquery datatable服务端分页
2016/08/31 Javascript
Nodejs搭建wss服务器教程
2017/05/24 NodeJs
webpack配置之后端渲染详解
2017/10/26 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
微信小程序修改数组长度的问题的解决
2019/12/17 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
python 中字典嵌套列表的方法
2018/07/03 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
css3 pointer-events 介绍详解
2017/09/18 HTML / CSS
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
德国EGOIST网店:销售畅销的设计师品牌
2017/04/18 全球购物
adidas澳大利亚官方网站:adidas Australia
2018/04/15 全球购物
澳大利亚优质的家居用品和生活方式公司:Bed Bath N’ Table
2019/04/16 全球购物
生产管理的三大手法
2013/11/11 职场文书
迟到检讨书800字
2014/01/13 职场文书
大学中国梦演讲稿
2014/04/23 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
医院岗前培训心得体会
2016/01/08 职场文书