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怎样调用MSSQL的存储过程
Oct 09 PHP
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 PHP
php urlencode()与urldecode()函数字符编码原理详解
Dec 06 PHP
用PHP和Shell写Hadoop的MapReduce程序
Apr 15 PHP
深入分析PHP引用(&amp;)
Sep 04 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
Nov 18 PHP
PHP中常用的字符串格式化函数总结
Nov 19 PHP
thinkphp实现上一篇与下一篇的方法
Dec 08 PHP
[原创]php获取数组中键值最大数组项的索引值
Mar 17 PHP
thinkPHP2.1自定义标签库的导入方法详解
Jul 20 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
Mar 11 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
Oct 21 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
探讨方法的重写(覆载)详解
2013/06/08 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
Raphael带文本标签可拖动的图形实现代码
2013/02/20 Javascript
概述一个页面从输入URL到页面加载完的过程
2016/12/16 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
Vue.js实现输入框绑定的实例代码
2017/08/24 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
Python中正则表达式详解
2017/05/17 Python
python安装numpy&amp;安装matplotlib&amp; scipy的教程
2017/11/02 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
水务局局长岗位职责
2013/11/28 职场文书
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
中学教师请假制度
2014/02/03 职场文书
中国入世承诺
2014/04/01 职场文书
个人借款担保书
2014/04/02 职场文书
计算机专业应届生求职信
2014/04/06 职场文书
村庄绿化方案
2014/05/07 职场文书
主题团日活动总结
2014/06/25 职场文书
培训师岗位职责
2015/02/14 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
白银帝国观后感
2015/06/17 职场文书
python实现过滤敏感词
2021/05/08 Python
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
对讲机的最大通讯距离是多少
2022/02/18 无线电
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技