抽奖函数升级版
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 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發
