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 相关文章推荐
解析link_mysql的php版
Jun 30 PHP
php图像处理函数大全(推荐收藏)
Jul 11 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
Aug 01 PHP
PHP使用CURL获取302跳转后的地址实例
May 04 PHP
PhpDocumentor 2安装以及生成API文档的方法
May 21 PHP
php实现两表合并成新表并且有序排列的方法
Dec 05 PHP
php发送与接收流文件的方法
Feb 11 PHP
PHP代码优化技巧小结
Sep 29 PHP
PHP Oauth授权和本地加密实现方法
Aug 12 PHP
PHP7新增运算符用法实例分析
Sep 26 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
Apr 26 PHP
PHP number_format函数原理及实例解析
Jul 14 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 事务处理数据实现代码
2010/05/13 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
javascript instanceof,typeof的区别
2010/03/24 Javascript
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
javascript实现微信分享
2014/12/23 Javascript
JQuery实现图片轮播效果
2015/09/15 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
js中数组对象去重的两种方法
2019/01/18 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
详解Python 协程的详细用法使用和例子
2018/06/15 Python
深入理解python中sort()与sorted()的区别
2018/08/29 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
Python rstrip()方法实例详解
2018/11/11 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
python解析yaml文件过程详解
2019/08/30 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
一波HTML5 Canvas基础绘图实例代码集合
2016/02/28 HTML / CSS
安全检查验收制度
2014/01/12 职场文书
运动会广播稿200米
2014/01/27 职场文书
教师节倡议书2015
2015/04/27 职场文书
离婚案件被告代理词
2015/05/23 职场文书
中学语文教学反思
2016/02/16 职场文书
诚信高考倡议书
2019/06/24 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python
python Django框架快速入门教程(后台管理)
2021/07/21 Python
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android