代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
PHP
】
一个简单的抽奖测试原型
作者:
红薯
/ 发布于
2012/5/14
/
972
业务需求,所以做了一个简单的原型测试,功能的主要需求是:用户账户内金额越高的用户中奖的机率就越大。 此脚本只能在命令行下使用,使用示例: php lucky.php 100
<div><?php /** * 抽奖程序 * * @File: lucky.php * @Author: zzxworld * @Email: <a href="mailto:zzxworld@gmail.com">zzxworld@gmail.com</a> * @Date: 2012-05-09 */</div> <div>$timer = microtime(true);</div> <div>/** 手动配置的参数 **/ # 奖池大小 $lucky_size = 1000; # 最高金额用户的中奖机率,不能超过奖池大小 $star_user_rate = 100; # 一等奖奖金 $lucky_first = 100; # 二等奖奖金 $lucky_second = 50; # 三等奖奖金 $lucky_third = 25; # 普通奖最大金额 $lucky_normal_max = 10; # 普通奖最小金额 $lucky_normal_min = 1;</div> <div>/** 自动从系统取值的参数 **/ # 奖金总金额 $lucky_amount = 578; # 拥有最多资产的用户的账户金额 $star_user_amount = 134;</div> <div> 当前用户金额 $user_amount = isset($argv[1]) ? intval($argv[1]) : 0; if ($user_amount < 1) { die('请在命令后面设置一个用户金额.' . chr(10)); } <div> 计算当前用户中奖机率 $user_rate = $star_user_rate/$lucky_size/$star_user_amount*$user_amount;</div> <div> 根据中奖机率计算奖金个数 $lucky_num = intval($user_rate * $lucky_size);</div> <div> 初始化奖池 $lucky_pool = array_fill(0, $lucky_size, 0);</div> <div> 中奖机率小于1的调整为1 if ($lucky_num < 1) { $lucky_num = 1; } <div> 安排奖池中的奖项 $lucky_items = array('first', 'second', 'third', 'normal'); $lucky_num += 3;</div> <div> 按奖金总额去除一,二,三等奖项 if ($lucky_amount < $lucky_first) { $lucky_num -= 1; unset($lucky_items['first']); } if ($lucky_amount < $lucky_second) { $lucky_num -= 1; unset($lucky_items['second']); } if ($lucky_amount < $lucky_third) { $lucky_num -= 1; unset($lucky_items['third']); } <div> 在奖池中随机生成奖项 foreach(array_rand($lucky_pool, $lucky_num) as $key) { $name = $lucky_items[array_rand($lucky_items)]; if (!isset($create_lucky_first) && $name == 'first') { $lucky_pool[$key] = $lucky_first; $create_lucky_first = true; continue; } <div> if (!isset($create_lucky_second) && $name == 'second') { $lucky_pool[$key] = $lucky_second; $create_lucky_second = true; continue; } <div> if (!isset($create_lucky_third) && $name == 'third') { $lucky_pool[$key] = $lucky_third; $create_lucky_third = true; continue; } <div> if ($name == 'normal') { $lucky_pool[$key] = rand($lucky_normal_min, $lucky_normal_max); } <div>} <div> 抽奖 $result = $lucky_pool[rand(0, $lucky_size)];</div> <div>echo '奖池大小:' . $lucky_size . chr(10); echo '奖金总金额:' . $lucky_amount . chr(10); echo '一等奖奖金:' . $lucky_first . chr(10); echo '二等奖奖金:' . $lucky_second . chr(10); echo '三等奖奖金:' . $lucky_third . chr(10); echo '普通奖奖金:' . $lucky_normal_min . ' - ' . $lucky_normal_max . chr(10); echo '明星用户资金总额:' . $star_user_amount . chr(10); echo '明星用户中奖机率:' . ($star_user_rate/$lucky_size) . chr(10) . chr(10);</div> <div>echo '当前用户资金总额:' . $user_amount . chr(10); echo '当前用户中奖机率:' . $user_rate . chr(10); echo '当前用户奖池中的奖项:'; foreach($lucky_items as $name) { switch($name) { case 'first': echo '一等奖(1),'; $lucky_num--; break; case 'second': echo '二等奖(1),'; $lucky_num--; break; case 'third': echo '三等奖(1),'; $lucky_num--; break; case 'normal': echo '普通奖(' . $lucky_num . ')'; break; } } echo chr(10); echo '当前用户抽奖结果:'; if ($result == $lucky_first) { echo '一等奖 ' . $result . '元'; } elseif($result == $lucky_second) { echo '二等奖 ' . $result . '元'; } elseif($result == $lucky_third) { echo '三等奖 ' . $result . '元'; } elseif($result >= $lucky_normal_min && $result <= $lucky_normal_max) { echo '普通奖 ' . $result . '元'; } else { echo '没有中奖'; } echo chr(10); echo chr(10);</div> <div>echo '执行耗时:' . (microtime(true) - $timer) . '秒' . chr(10);</div>
试试其它关键字
抽奖测试原型
同语言下
.
用net匹配并替换iOS标准的emoji表情符号
.
处理带Emoji表情的的字符串
.
获取微信昵称时 过滤特殊字符
.
通过判断上传文件的头字符来判断文件的类型
.
模拟百度URL加密解密算法
.
以太坊检查地址是否合法
.
实现crontab解析类
.
获取每个月的开始和结束时间
.
图片上传工具类
.
APP手机应用信息采集
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
红薯
贡献的其它代码
(
14
)
.
单个 C 文件实现的 Web 服务器
.
使用 Collections.frequency 找出重复的单词
.
代码禁用 HTTP 缓存
.
一个简单的抽奖测试原型
.
使用 C# 创建一个 FTP 服务器
.
7 种将字符串反转的 Java 方法
.
猜数字游戏
.
在控制台程序中使用 CFileDialog
.
windows下批量执行sql文件
.
关于字符串处理的代码片段
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3