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);
php随机抽奖实例分析的更多相关文章
- C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断
C#保留2位小数几种场景总结 场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.2 ...
- php按照奖品百分比随机抽奖代码分析
这个忘记从哪里copy过来了 /** * 概率算法 * @param array $probability * @return integer|string */ function get_rand( ...
- 原生js轮盘抽奖实例分析(幸运大转盘抽奖)
效果图: 所需图片素材: 这张图是pointer.png的位置的. turntable-bg.jpg这张是转盘背景图,在背景位置. 这张是turntable.png位置的. 需要这三张图片,如果要实现 ...
- RPC原理及RPC实例分析
在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 1 2 3 4 5 6 public class ...
- 【Matplotlib】数据可视化实例分析
数据可视化实例分析 作者:白宁超 2017年7月19日09:09:07 摘要:数据可视化主要旨在借助于图形化手段,清晰有效地传达与沟通信息.但是,这并不就意味着数据可视化就一定因为要实现其功能用途而令 ...
- Hive(六)hive执行过程实例分析与hive优化策略
一.Hive 执行过程实例分析 1.join 对于 join 操作:SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (pv.useri ...
- RPC-原理及RPC实例分析
还有就是:RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞: (2)NIO:Non-Blocking IO, 同步非阻塞; 参考:IO多路复用,同步,异步,阻塞和非阻 ...
- PHP+jQuery开发简单的翻牌抽奖实例
PHP+jQuery开发简单的翻牌抽奖实例,实现流程:页面放置6个方块作为奖项,当抽奖者点击某一块时,方块翻转到背面,显示中奖信息,这个奖品是随机的,不是固定的. 在页面上放置6个奖项: <ul ...
- 数据结构:用实例分析ArrayList与LinkedList的读写性能
目录 背景 ArrayList LinkedList 实例分析 1.增加数据 2.插入数据 3.遍历数据 3.1.LinkedList遍历改进 总结 背景 ArrayList与LinkedList是J ...
随机推荐
- "Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list.xml,reason: Connection
"Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list.xml,reason: Conne ...
- 【HDOJ】3285 Convex Hull of Lattice Points
凸包模板题目. /* 3285 */ #include <iostream> #include <cstdio> #include <cstring> #inclu ...
- -_-#Android版QQ浏览器广告过滤
省流加速 - 广告过滤 默认开启 设别广告是添加的标签最外层标签带有adv download
- 【转】Android 带checkbox的listView 实现多选,全选,反选 -- 不错
原文网址:http://blog.csdn.net/onlyonecoder/article/details/8687811 Demo地址(0分资源):http://download.csdn.net ...
- SharePoint Server 2010安装图解
SharePoint Server 2010作为MOSS 2007的升级版本,自从2009年底发布Beta版本以来就备受关注,网络上已经出现了很多相关的文章,其中也不乏中文的信息. 最近SharePo ...
- 总结Python的思维导图
Python基础的思维导图:
- static关键字使用
static关键字对一些公共使用的数据,比如是饭店筷子,不可能说每个人去饭店吃饭的时候自带一双筷子,饭店的筷子对于进店吃饭的对象都是公共的; 静态变量,跟其他变量不同的是,它是与类关联的,其他变量则是 ...
- 数据库 —— 使用JDBC操作数据库
[Link] http://www.developer.com/java/data/manipulating-a-database-with-jdbc.html Manipulating a Data ...
- 部分实用的SQL语句
一.在数据库创建表格的SQL语句 1,创建一个link表格,包含属性:lid 主键,title 标题, imgpath 图片地址 , url 网址 , info 说明, isshow 显示1 ...
- .NET获取英文月份缩写名(可获取其他国家)
来自: http://www.cnblogs.com/highend/archive/2010/03/16/1687126.html 今天在看本公司原有的项目代码当中 很不幸看到其中一些实现的部分代码 ...