PHP lottery probability algorithm
/* * 不同概率的抽奖原理就是把0到*(比重总数)的区间分块 * 分块的依据是物品占整个的比重,再根据随机数种子来产生0-* 中的某个数 * 判断这个数是落在哪个区间上,区间对应的就是抽到的那个物品。 * 随机数理论上是概率均等的,那么相应的区间所含数的多少就体现了抽奖物品概率的不同。 */ function get_rand($proArr) { $result = array(); foreach ($proArr as $key => $val) { $arr[$key] = $val['v']; } $proSum = array_sum($arr); // 计算总权重 $randNum = mt_rand(1, $proSum); $d1 = 0; $d2 = 0; for ($i=0; $i < count($arr); $i++) { $d2 += $arr[$i]; if($i==0) { $d1 = 0; } else { $d1 += $arr[$i-1]; } if($randNum >= $d1 && $randNum <= $d2) { $result = $proArr[$i]; } } unset ($arr); return $result; } /* * 使用较多的为这个方法 */ function get_rand1($proArr) { $result = array(); foreach ($proArr as $key => $val) { $arr[$key] = $val['v']; } // 概率数组的总概率 $proSum = array_sum($arr); asort($arr); // 概率数组循环 foreach ($arr as $k => $v) { $randNum = mt_rand(1, $proSum); if ($randNum <= $v) { $result = $proArr[$k]; break; } else { $proSum -= $v; } } return $result; }
Copy after login
/* * 奖项数组 * 奖品id,名称,比重 */$arr = array( array('id'=>1,'name'=>'特等奖','v'=>1), array('id'=>2,'name'=>'一等奖','v'=>5), array('id'=>3,'name'=>'二等奖','v'=>10), array('id'=>4,'name'=>'三等奖','v'=>12), array('id'=>5,'name'=>'四等奖','v'=>22), array('id'=>6,'name'=>'没中奖','v'=>50) ); 测试结果(10000次): get_rand(): count_1:0 count_2:490 count_3:1021 count_4:1172 count_5:2172 count_6:5145 特等奖中奖率全为:0get_rand1(): count_1:92 count_2:477 count_3:1017 count_4:1195 count_5:2264 count_6:4955总体感觉 get_rand1() 更准确些......
Copy after login
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article
Assassin's Creed Shadows: Seashell Riddle Solution
1 months ago
By DDD
What's New in Windows 11 KB5054979 & How to Fix Update Issues
3 weeks ago
By DDD
Where to find the Crane Control Keycard in Atomfall
1 months ago
By DDD
How to fix KB5055523 fails to install in Windows 11?
2 weeks ago
By DDD
InZoi: How To Apply To School And University
3 weeks ago
By DDD

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)
