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数据流应用的一个简单实例
Sep 14 PHP
关于PHP内存溢出问题的解决方法
Jun 25 PHP
php中引用符号(&amp;)的使用详解
Nov 13 PHP
php跨域cookie共享使用方法
Feb 20 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
php生成html文件方法总结
Dec 01 PHP
php自动更新版权信息显示的方法
Jun 19 PHP
php自定义函数实现统计中文字符串长度的方法小结
Apr 15 PHP
php实现数组纵向转横向并过滤重复值的方法分析
May 29 PHP
YII2自动登录Cookie总是失效的解决方法
Jun 28 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
PHP实现的ID混淆算法类与用法示例
Aug 10 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实现数组筛选奇数和偶数示例
2014/04/11 PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
2014/09/16 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
python之import机制详解
2014/07/03 Python
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
基于python log取对数详解
2018/06/08 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
金属材料工程个人求职的自我评价
2013/12/04 职场文书
年终总结会议主持词
2014/03/17 职场文书
欢迎标语大全
2014/06/21 职场文书
班级文化标语
2014/06/23 职场文书
群众路线自我剖析及整改措施
2014/11/04 职场文书