抽奖函数升级版
php
函数
奖项
抽奖
排除
概率
自定义
需求
可自定义概率,按需求排除奖项 无 ?php/** * 抽奖函数升级版,可排除若干奖项 */class Lottery { static public $rate; static public $ignore; /** * * @param type $rate 概率设置 * @param type $ignore 忽略的奖项 * @return 调用实例化后的对象方法 * @e
可自定义概率,按需求排除奖项
<?php /** * 抽奖函数升级版,可排除若干奖项 */ class Lottery { static public $rate; static public $ignore; /** * * @param type $rate 概率设置 * @param type $ignore 忽略的奖项 * @return 调用实例化后的对象方法 * @example Lottery::runOnce(array(20, 10, 10, 10), array(0)); */ static public function runOnce($rate = array(10, 10, 10, 10), $ignore = array()) { self::$rate = $rate; self::$ignore = $ignore; $obj = new self; return $obj->lotteryProcess(); } /** * 处理抽奖 * @return type */ public function lotteryProcess() { $rateSum = array_sum(self::$rate); //概率之和 //考虑用户输入的概率之和不等于100 if ($rateSum < 100) { array_push(self::$rate, 100 - $rateSum); } elseif ($rateSum > 100) { die('The rate sum over 100%!'); } //处理忽略奖项 $rateCount = count(self::$rate); foreach (self::$rate as $key => $value) { if (in_array($key, self::$ignore)) { self::$rate[$rateCount - 1]+=self::$rate[$key]; self::$rate[$key] = 0; } $seedRaw[$key] = self::$rate[$key] * 100; //概率放大100被备用 } $seed = $this->arraySum($seedRaw); //处理数组 $randVal = mt_rand(0, 10000); return $this->judge($seed, $randVal); } /** * 从0-10000重新组织数组,每个值为之前各项的累加 * @param array $seedRaw * @return array */ private function arraySum(array$seedRaw) { foreach ($seedRaw as $key => $value) { $tmpSum = 0; for ($i = 0; $i < $key; $i++) { $tmpSum+=$seedRaw[$i]; } $seed[$key] = $tmpSum; } array_push($seed, 10000); return $seed; } /** * 根据随机值判断此次中了第几个奖项 * @param type $seed * @param type $rand * @return int */ private function judge($seed, $rand) { array_push($seed, NULL); //凑数 for ($i = 0; $i < count($seed) - 1; $i++) { if ($rand >= $seed[$i] && $rand < $seed[$i + 1]) { return $i; } } } } ini_set('display_errors', 'on'); $l0 = 0; $l1 = 0; $l2 = 0; $l3 = 0; $l4 = 0; $l5 = 0; for ($i = 0; $i <= 10000; $i++) { $result = Lottery::runOnce(array(20, 10, 10, 10), array(0, 1)); if ($result === 0) $l0++; if ($result == 1) $l1++; if ($result == 2) $l2++; if ($result == 3) $l3++; if ($result == 4) $l4++; } echo '0:' . $l0 . '<br/>1:' . $l1 . '<br/>2:' . $l2 . '<br/>3:' . $l3 . '<br/>4:' . $l4;
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
仓库:如何复兴队友
1 个月前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
4 周前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保护它?
4 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写
