php随机抽奖实例分析

<?php
header(‘Content-type:text/html;charset=utf-8‘);
/**

 * 抽奖工具

 */

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();
    }
}

$awards = array(
        ‘0‘ => array(‘pro‘ => 1, ‘info‘ => ‘1%的可能性‘ , ‘num‘ =>0),
        ‘1‘ => array(‘pro‘ => 25, ‘info‘ => ‘25%的可能性‘ , ‘num‘ =>0),
        ‘2‘ => array(‘pro‘ => 40, ‘info‘ => ‘40%的可能性‘ , ‘num‘ =>0),
        ‘3‘ => array(‘pro‘ => 34, ‘info‘ => ‘34%的可能性‘ , ‘num‘ =>0),
    );
 //改变概率字段名
lottery_tool::setProField(‘pro‘);
//设置奖品
lottery_tool::setAwards($awards);
$result = array();

for ($i = 100; $i --;) {
     //抽奖
    $result[] = lottery_tool::roll();
}

foreach ($result as $key => $value) {
    $awards[$value[‘roll_key‘]][‘num‘] ++;
}

echo ‘<pre>‘;
var_dump($awards);
时间: 2024-07-29 10:34:48

php随机抽奖实例分析的相关文章

原生js轮盘抽奖实例分析(幸运大转盘抽奖)

效果图: 所需图片素材: 这张图是pointer.png的位置的. turntable-bg.jpg这张是转盘背景图,在背景位置. 这张是turntable.png位置的. 需要这三张图片,如果要实现一下,直接另存这三图片引入进去即可.如果不会请修改成对应的图片名字,放到同一个文件下. 基本原理: 1,通过设置CSS样式的position属性,z-index属性等实现背景图,转盘图与指针图的层叠摆放: 2,通过设置元素style.transform = "rotate(0deg)"实现

信用评级模型实例分析(以消费金融为例)-中

信用评级模型实例分析(以消费金融为例)-中 原创 2016-10-13 单良 亚联大数据 点击"亚联大数据"可关注我们! 第五章 自变量的初步分析与处理 模型变量有两种类型,分别是连续型变量 .连续型变数系指该变数为观察数据所得的实际数值,并没有经过群组处理 .间断型变数则系指质性变量或类别型变量 . 两种变数类型都适用于评分模型,但建议变量使用间断型态进行开发评分模型,主要原因如下: 1. 间断型变量有助于处理极端值或是样本数量较少的变量. 2. 非线性的因变量 (dependenc

TCP协议详解即实例分析

 TCP协议详解 3.1 TCP服务的特点 TCP协议相对于UDP协议的特点是面向连接.字节流和可靠传输. 使用TCP协议通信的双方必须先建立链接,然后才能开始数据的读写.双方都必须为该链接分配必要的内核资源,以还礼链接状态和连接上数据的传输.TCP链接是全双工的,即双方的数据读写可以通过一个连接进行.完成数据交换之后,通信双方都必须断开连接以释放系统资源. TCP协议的这种连接是一对一的,所以基于广播和多播(目标是多个主机地址)的应用程序不能使用TCP服务.而无连接协议UDP则非常适合于广

第18课 登录对话框实例分析

1. 登录对话框 (1)需求分析 ①可复用的软件部件 ②获取用户名和密码 (2)附加需求:随机验证码 2. 登录对话框的设计与架构 (1)架构 (2)如何在两个不同的对话框间传递数据? 通过附加的成员变量和成员函数完成不同对话框间的数据传递 3. 进一步开发 (1)检查用户名和密码是否为空:当用户名和密码为空时提示错误 (2)随机验证码:①当验证码输入错误时进行提示:②验证码随时刷新 [实例分析]登录对话框实现(验证码部分在后续部分实现) 4. 小结 (1)登录对话框作为可复用的软件部件进行开发

数据挖掘技术在信用卡业务中的应用及实例分析

信用卡业务具有透支笔数巨大.单笔金额小的特点,这使得数据挖掘技术在信用卡业务中的应用成为必然.国外信用卡发卡机构已经广泛应用数据挖掘技术促进信用卡业务的发展,实现全面的绩效管理.我国自1985年发行第一张信用卡以来,信用卡业务得到了长足的发展,积累了巨量的数据,数据挖掘在信用卡业务中的重要性日益显现. 一.数据挖掘技术在信用卡业务中的应用 数据挖掘技术在信用卡业务中的应用主要有分析型客户关系管理.风险管理和运营管理. 1.分析型CRM 分析型CRM应用包括市场细分.客户获取.交叉销售和客户流失.

实现 | 朴素贝叶斯模型算法研究与实例分析

实现 | 朴素贝叶斯模型算法研究与实例分析(白宁超2018年9月4日09:03:21) 导读:朴素贝叶斯模型是机器学习常用的模型算法之一,其在文本分类方面简单易行,且取得不错的分类效果.所以很受欢迎,对于朴素贝叶斯的学习,本文首先介绍理论知识即朴素贝叶斯相关概念和公式推导,为了加深理解,采用一个维基百科上面性别分类例子进行形式化描述.然后通过编程实现朴素贝叶斯分类算法,并在屏蔽社区言论.垃圾邮件.个人广告中获取区域倾向等几个方面进行应用,包括创建数据集.数据预处理.词集模型和词袋模型.朴素贝叶斯

PHP+jQuery开发简单的翻牌抽奖实例

PHP+jQuery开发简单的翻牌抽奖实例,实现流程:页面放置6个方块作为奖项,当抽奖者点击某一块时,方块翻转到背面,显示中奖信息,这个奖品是随机的,不是固定的. 在页面上放置6个奖项: 1 <ul id="prize"> 2 <li class="red" title="点击抽奖">1</li> 3 <li class="green" title="点击抽奖"&g

【OpenGL】Shader实例分析(七)- 雪花飘落效果

转发请保持地址:http://blog.csdn.net/stalendp/article/details/40624603 研究了一个雪花飘落效果.感觉挺不错的.分享给大家,效果例如以下: 代码例如以下: Shader "shadertoy/Flakes" { // https://www.shadertoy.com/view/4d2Xzc Properties{ iMouse ("Mouse Pos", Vector) = (100,100,0,0) iChan

Apache漏洞利用与安全加固实例分析

Apache 作为Web应用的载体,一旦出现安全问题,那么运行在其上的Web应用的安全也无法得到保障,所以,研究Apache的漏洞与安全性非常有意义.本文将结合实例来谈谈针对Apache的漏洞利用和安全加固措施. Apache HTTP Server(以下简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,是最流行的Web服务器软件之一.虽然近年来Nginx和Lighttpd等Web Server的市场份额增长得很快,但Apache仍然是这个领