尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
php简单抽奖算法(设置库存)
注意: probability(概率)之和必须100下面方法为简单没有库存public function draw() { $draw_list [ [ name 空奖(0-80), probability 80.00 ], [ name 5积分(80-90), probability 10.00 ], [ name 10积分(90-98), probability 8.00 ], [ name 20积分(98-100), probability 2.00 ], ]; // 生成一个0到100之间的随机数 $randomNum random_int(0, 100); $currentProbability 0; foreach ($draw_list as $draw_info) { $currentProbability $draw_info[probability]; if ($randomNum $currentProbability) { $draw_info[currentProbability] $currentProbability; $draw_info[randomNum] $randomNum; $draw_result $draw_info; break; } } $this-success(请求成功!, $draw_result); }含有库存写法public function draw_test() { $draw_list [ [ name 空奖(0-80), probability 80.00, stock 0 ], [ name 5积分(80-90), probability 10.00, stock 1 ], [ name 10积分(90-98), probability 9.9999999, stock 0 ], [ name 20积分(98-100), probability 0.0000001, stock 1 ], ]; // 修改这里调整支持的小数位数 $scale 100000000; // 整数溢出安全校验 $maxExpectTotalWeight 100 * $scale; // 预留1/2安全余量防止后续分摊权重后溢出 if ($maxExpectTotalWeight PHP_INT_MAX / 2) { $this-error(scale配置过大存在整数溢出风险请调小scale值); } $emptyTotalWeight 0; $validList []; foreach ($draw_list as $item) { $p (float)$item[probability]; $intWeight (int)round($p * $scale); if ($item[stock] 0) { $validList[] [ name $item[name], probability $item[probability], //保留原始概率 weight $intWeight, stock $item[stock] ]; } else { $emptyTotalWeight $intWeight; } } // 边界全部奖品库存为0 if (empty($validList)) { $this-error(暂无可用奖品); } // 将库存0的奖项权重分摊到有效奖品 if ($emptyTotalWeight 0) { $validCount count($validList); $avgAdd (int)($emptyTotalWeight / $validCount); $remainder $emptyTotalWeight % $validCount; //余数补到最后一项 foreach ($validList as $idx $v) { $v[weight] $avgAdd; if ($idx $validCount - 1) { $v[weight] $remainder; } } unset($v); } $totalWeight array_sum(array_column($validList, weight)); // 极端保护总权重不能小于1 if ($totalWeight 1) { $this-error(奖品权重合计异常); } $rand mt_rand(1, $totalWeight); $currentWeight 0; $draw_result null; foreach ($validList as $row) { $currentWeight $row[weight]; if ($rand $currentWeight) { $draw_result $row; $draw_result[rand] $rand; $draw_result[totalWeight] $totalWeight; break; } } $this-success(请求成功!, $draw_result); }
RELATED

相关推荐

WandEnhancer 完整指南:免费解锁 Wand(WeMod)专业版与手机远程控制

WandEnhancer 完整指南:免费解锁 Wand(WeMod)专业版与手机远程控制

WandEnhancer 完整指南:免费解锁 Wand(WeMod)专业版与手机远程控制 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer …

📅 2026/10/7 14:10:14
三菱PLC+MCGS触摸屏四路抢答器设计与组态实战

三菱PLC+MCGS触摸屏四路抢答器设计与组态实战

做这套四路抢答器,起因是朋友的工厂要办安全知识竞赛,问我说市场上买的成品抢答器不够灵活,想让我帮忙做一套。我手头正好有三菱PLC和MCGS触摸屏的现货,就顺手搭了一套。做完之后发现这套系统的含金量其实远不止“抢答”本身——它…

📅 2026/10/7 19:22:15
Nuxt全栈实践:Excel模板下载、上传解析与数据导入闭环

Nuxt全栈实践:Excel模板下载、上传解析与数据导入闭环

1. 一个看似简单却处处是坑的闭环需求 “下载模板 - 填写内容 - 上传导入”这个模式在业务系统里出现的频率,可能超出你的想象。后台批量导入用户、月考成绩录入、供应商资料收集、题库Excel导入、报名信息表批量更新……几乎每个管理系统都逃不掉这类操作。这个功能…

📅 2026/10/10 22:45:00
MORE NEWS

更多资讯

📰

雷达DBF与相干积累工程实践:从信噪比到目标角度测量的完整链路

简介:雷达数字波束形成(DBF)相干积累与目标角度测量MATLAB仿真包,面向雷达信号处理初学者及需要复现DBF原理验证的工程师。资源基于8通道距离-多普勒二维矩阵数据,通过DBF实现通道间相干积累,信噪比平均提升…

📰

容器平台选型指南:阶段匹配与技术路线

1. 容器平台选型的认知误区与破局思路"你们公司容器平台选型卡在第几步了?"这个问题最近在技术圈频繁出现。作为经历过三次完整容器化改造的老兵,我发现90%的选型失败案例都源于同一个问题——团队对自身技术阶段缺乏清晰认知就盲目对比产品功…

📰

SpringBoot+Vue医院挂号系统:毕设源码与核心业务解析

简介:一套基于SpringBoot与Vue开发的医院挂号就诊管理系统毕设项目资源,面向需要快速完成毕业设计的Java方向学生,覆盖挂号管理、在线咨询、健康教育与公告管理等典型业务模块。系统采用前后端分离架构,后端基于SpringBootMybatis…

📰

AI时代智能项目管理的核心特征与实施挑战

1. AI时代项目管理面临的范式转变去年我在负责一个跨国AI研发项目时,传统甘特图在第三周就完全失去了指导意义——算法团队突然发现的优化路径让开发周期缩短40%,而数据团队却因为合规审查延期了两周。这个经历让我深刻意识到,当项目成员开始…

📰

STM32 DMA+PWM输出指定脉冲数的6种实现方法与避坑指南

简介:针对需要精确输出指定个数PWM脉冲的嵌入式开发者,这份资源汇总了STM32平台下6种DMA与PWM组合实现方案,覆盖电机控制、步进驱动、LED调光等典型应用场景。压缩包共80个文件,包括34个h头文件、33个c源文件,另有5个R…

📰

Hugging Face Hub 1.0:开源机器学习协作平台的技术演进与实践

1. 项目概述:Hugging Face Hub 1.0里程碑与开源机器学习五年演进2019年那个夏天,当Hugging Face首次推出Transformers库时,恐怕连创始团队都没预料到,这个以表情符号命名的开源项目会成为机器学习领域的基础设施级存在。五年后的今…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬