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经典的给图片加水印程序
Dec 06 PHP
初级的用php写的采集程序
Mar 16 PHP
非常精妙的PHP递归调用与静态变量使用
Dec 16 PHP
PHP递归调用的小技巧讲解
Feb 19 PHP
两级联动select刷新后其值保持不变的实现方法
Jan 27 PHP
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
Sep 06 PHP
PHP实现自动登入google play下载app report的方法
Sep 23 PHP
PHP实现图片旋转效果实例代码
Oct 01 PHP
Linux平台PHP5.4设置FPM线程数量的方法
Nov 09 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 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
对盗链说再见...
2006/10/09 PHP
php代码把全角数字转为半角数字
2007/12/10 PHP
PHP Socket 编程
2010/04/09 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
php 判断字符串中是否包含html标签
2014/02/17 PHP
ThinkPHP空模块和空操作详解
2014/06/30 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
php实现记事本案例
2020/10/20 PHP
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
python实现飞机大战游戏
2020/10/26 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
Python有参函数使用代码实例
2020/01/06 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
python实现斗地主分牌洗牌
2020/06/22 Python
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
幼教个人求职信范文
2013/12/02 职场文书
学校采购员岗位职责
2014/01/02 职场文书
班主任工作年限证明
2014/01/12 职场文书
个人现实表现材料
2014/02/04 职场文书
公务员转正考察材料
2014/02/07 职场文书
运动会稿件100字
2014/02/21 职场文书