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 正则匹配函数体
Aug 25 PHP
php的memcache类分享(memcache队列)
Mar 26 PHP
php计算函数执行时间的方法
Mar 20 PHP
php根据日期显示所在星座的方法
Jul 13 PHP
php搜索文件程序分享
Oct 30 PHP
浅谈PHP中foreach/in_array的使用
Nov 02 PHP
PHP可变函数学习小结
Nov 29 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
php post json参数的传递和接收处理方法
May 31 PHP
PHP获取星期几的常用方法小结
Dec 18 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 PHP
Yii框架模拟组件调用注入示例
Nov 11 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/12/25 PHP
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
php图片合成方法(多张图片合成一张)
2017/11/25 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
javascript 继承实现方法
2009/08/26 Javascript
jquery里的each使用方法详解
2010/12/22 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
2017/07/27 Javascript
微信小程序实现自动定位功能
2018/10/31 Javascript
Quasar Input:type=&quot;number&quot; 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
简单实现python收发邮件功能
2018/01/05 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
python生成并处理uuid的实现方式
2020/03/03 Python
python 常见的排序算法实现汇总
2020/08/21 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
介绍一下SQL Server里面的索引视图
2016/07/31 面试题
教师自荐信范文
2013/12/09 职场文书
工作人员思想汇报
2014/01/09 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
教师师德演讲稿
2014/05/06 职场文书
爱护公共设施的标语
2014/06/24 职场文书
演讲开场白台词大全
2015/05/29 职场文书
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL