Php implements probabilistic random lottery code and php probability lottery code. Php implements probabilistic random lottery code. php probability lottery code 1. initial data: the higher the weight, the higher the probability of extraction [prize 1, weight 5], [Prize 2, weight 6], [prize 3, permission php implementation probability random lottery code, php probability lottery code
1. initial data:
A higher weight indicates a higher probability of extraction.
[Prize 1, weight 5], [Prize 2, weight 6], [prize 3, weight 7], [prize 4, weight 2]
2. Procedure:
1) N = 5 + 6 + 7 + 2 = 20
2) Then, take the random number M from 1 to n.
3) define the weight range of each prize; 1: 1-5; 2: 6-11; 3: 12-18; and 4: 19-20.
4) If M is within the weight range of a prize, mark the prize to be extracted.
<? Php/*** Prize */class Prize {# ID public $ id = null; # weight public $ weight = null; # Prize name public $ name = null; # protected $ start = 0; # protected $ end = 0; public function _ construct ($ id, $ weight, $ name) {if (! $ Id) {throw new Exception ('prize ID is empty. ') ;}$ this-> id = $ id; $ this-> weight = $ weight? $ Weight: 0; $ this-> name = $ name? $ Name: 'Random prize '. $ id ;}# id public function getId () {return $ this-> id ;}# weight public function getWeight () {return $ this-> weight ;} # set the weight range public function setRange ($ start, $ end) {$ this-> start = $ start; $ this-> end = $ end ;} # determine whether a random number is in the public function inRange ($ num) {return ($ num >=$ this-> start) in the weight range) & ($ num <= $ this-> end) ;}/ *** prize pool */class PrizePoll implements IteratorAggregate, Count Able {# Prize set protected $ items = array (); # add public function addItem (Prize $ item) {$ this-> items [$ item-> getId ()] = $ item; return $ this ;}# delete prize public function removeItem ($ itemId) {if (isset ($ this-> items [$ itemId]) {unset ($ this-> items [$ itemId]);} return $ this;} # Update Prize public function updateItem (Prize $ item) {if (isset ($ this-> items [$ item-> getId ()]) {$ this-> items [$ item-> getId ()] = $ item;} Return $ this ;}# get all prizes public function getItems () {return $ this-> items ;}# all available prizes (if the weight is 0, it indicates that this prize will never be obtained.) public function getVisibleItems () {$ items = array (); foreach ($ this-> items as $ item) {if ($ item-> getWeight () {$ items [$ item-> getId ()] = $ item ;}} return $ items ;}# Countable :: count public function count () {return count ($ this-> items) ;}# IteratorAggregate: getIterator () public func Tion getIterator () {return new ArrayIterator ($ this-> items) ;}/ *** simple lucky draw class */class SimpleTurn {# prize pool protected $ poll = null; public function _ construct (PrizePoll $ poll) {if ($ poll) {$ this-> setPoll ($ poll) ;}# lottery public function run (PrizePoll $ poll) {$ poll = $ poll? $ Poll: $ this-> poll; if (! $ Poll) {throw new Exception ('award pool not initialized ');} if ($ poll-> count () <= 0) {throw new Exception ('empty prize pool ') ;}$ items = $ poll-> getVisibleItems (); if (count ($ items) <= 0) {throw new Exception ('empty prize pool ');} $ sum = 0; foreach ($ items as $ item) {$ start = $ sum + 1; $ sum + = $ item-> getWeight (); $ end = $ sum; # set the weight range of the prize $ item-> setRange ($ start, $ end );} # Random number $ rand = $ this-> getRandNum (1, $ sum); # foreach ($ ite MS as $ item) {if ($ item-> inRange ($ rand) {return $ item;} return null ;}# obtain the random number public function getRandNum ($ min, $ max) {return mt_rand ($ min? $ Min: 1, $ max) ;}# set public function setPoll (PrizePoll $ poll) {$ this-> poll = $ poll ;}} # Example try {$ prizePoll = new PrizePoll (); $ prizePoll-> addItem (new Prize (1, 5)-> addItem (new Prize (2, 6 )) -> addItem (new Prize (3, 7)-> addItem (new Prize (4, 2); $ turn = new SimpleTurn ($ prizePoll ); $ prize = $ turn-> run (); var_dump ($ prize);} catch (Exception $ e) {print_r ($ e );}
Articles you may be interested in:
- Php lottery applet implementation code
- Php implementation: code sharing of the lottery program that can set the winning probability
- Example of the PHP probability algorithm applicable to lottery programs and random advertisements
- Php solves the problem of inventory negative numbers caused by high-traffic concurrent warehouse receiving such as flash sales and flash sales.
- PHP turntable lottery interface instance
- Php lottery program winning probability algorithm
- PHP + jQuery ripple drawing function implementation
Tip 1. initial data: the higher the weight, the higher the probability of extraction [prize 1, weight 5], [Prize 2, weight 6], [prize 3, right...