1. <?php
  2. /**
  3. * 全概率计算
  4. *
  5. * @param array $ps array('a'=>0.5,'b'=>0.2,'c'=>0.4)
  6. * @return string 返回上面数组的key
  7. */
  8. function random($ps)
  9. {
  10. static $arr = array();
  11. $key = md5(serialize($ps));
  12. if (!isset($arr[$key])) {
  13. $max = array_sum(array_keys($ps));
  14. foreach ($ps as $k => $v) {
  15. $temp = $v['odds'] / $max * 10000;
  16. for ($i = 0; $i < $temp; $i++) {
  17. $arr[$key][] = $k;
  18. }
  19. }
  20. }
  21. return $arr[$key][mt_rand(0, count($arr[$key]) - 1)];
  22. }
  23. $p = [
  24. 5 => ['odds' => (1 / 5000), 'name' => '定制座驾'],
  25. 6 => ['odds' => (1 / 5000), 'name' => '法拉利'],
  26. 7 => ['odds' => (1 / 3000), 'name' => '独角兽'],
  27. 8 => ['odds' => (1 / 5000), 'name' => '月卡'],
  28. 9 => ['odds' => (0 / 5000), 'name' => '季卡'],
  29. 10 => ['odds' => (1 / 2000), 'name' => '年卡'],
  30. 100 => ['odds' => (29984 / 30000), 'name' => '没有中奖'],
  31. ];
  32. $data = [];
  33. for ($i = 0; $i < 1000; $i++) {
  34. $key = random($p);
  35. echo $key;
  36. echo "==";
  37. if (isset($data[$key])) {
  38. $data[$key]++;
  39. } else {
  40. $data[$key] = 1;
  41. }
  42. }
  43. var_dump($data);

分类: web

标签:   php