Home  >  Article  >  Backend Development  >  A lottery function (customized number and probability of winning prizes)

A lottery function (customized number and probability of winning prizes)

WBOY
WBOYOriginal
2016-07-25 08:50:291527browse
Suitable for lottery system
  1. /*
  2. * A lottery category, accurate to one ten thousandth
  3. * Three steps: 1. Accept a winning probability array; 2. Accept a lottery seed; 3. Return the winning level
  4. * /
  5. class Lottery {
  6. /*
  7. * Winning probability array, automatically determine the number of awards
  8. * The sum of the array key values ​​is 100, automatically calculate the probability of not winning, if the initial value exceeds 100, an error will be thrown
  9. */
  10. protected $_rate = array();
  11. /*
  12. * Set the winning probability,
  13. * @param Array, the winning probability, passed in as an array
  14. */
  15. public function setRate($rate = array(12.1, 34) ) {
  16. $this->_rate = $rate;
  17. if (array_sum($this->_rate) > 100)//Detect whether there is a problem with the probability setting
  18. throw new Exception('Winning rate upto 100%') ;
  19. if (array_sum($this->_rate) < 100)
  20. //Define the probability of not winning. When the probability given by the user only sums to 100, ignore 0
  21. $this->_rate[] = 100 - array_sum($this->_rate);
  22. }
  23. /*
  24. * Randomly generate an integer seed from 1 to 10000 and submit it to the winning judgment function
  25. * @return int, sorted by the incoming probability, return the winning The number of items
  26. */
  27. public function runOnce() {
  28. return $this->judge(mt_rand(0, 10000));
  29. }
  30. /*
  31. * According to the set probability, judge an incoming Whether the random value wins the prize
  32. * @param int,$seed Random number within 10000
  33. * @return int,$i Sort by the passed probability and return the number of winning items
  34. */
  35. protected function judge($seed) {
  36. foreach ($this->_rate as $key => $value) {
  37. $tmpArr[$key + 1] = $value * 100;
  38. }
  39. //Multiply the probability by ten and accumulate it for random selection, Combined into
  40. $tmpArr[0] = 0;
  41. foreach ($tmpArr as $key => $value) {
  42. if ($key > 0) {
  43. $tmpArr[$key] += $tmpArr[$key - 1];
  44. }
  45. }
  46. for ($i = 1; $i < count($tmpArr); $i++) {
  47. if ($tmpArr[$i - 1] < $seed && $seed < = $tmpArr[$i]) {
  48. return $i; //Return the number of winning items (in order of setting probability)
  49. }
  50. }
  51. }
  52. }
  53. $rate = array(33, 20, 2, 0.95, 12, 4.55);
  54. $a = new Lottery;
  55. $a->setRate($rate);
  56. for ($i = 0; $i <= 10000; $i++) {
  57. $b = $a->runOnce();
  58. @$rewards[$b]++;
  59. }
  60. unset($rewards['']);
  61. echo array_sum($rewards);
  62. ?>
  63. < ;thead>Run 10,000 times, compare the set probability and the number of winnings
  64. Set the probabilityThe number of winnings
    %
  65. %
    %
    %
    %< /td>
    %
Copy code
A lottery function (customized number and probability of winning prizes)


Statement:
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