亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php實現概率性隨機抽獎代碼

2024-05-04 23:41:48
字體:
來源:轉載
供稿:網友
本文給大家分享的是使用php根據獎品的權重來實現概率性隨機抽獎的代碼,非常的使用,有類似需求的小伙伴,可以拿去參考下
 

1、初始數據:

權重越大,抽取的幾率越高
[獎品1, 權重 5], [ 獎品2, 權重6], [ 獎品3, 權重 7], [ 獎品4, 權重2]

2、處理步驟:

1)N = 5 + 6 + 7 + 2 = 20
2)然后取1-N的隨機數M
3)界定各 獎品的權重范圍值 獎品 1 : 1-5 ; 獎品2 : 6-11; 獎品3: 12-18; 獎品4: 19-20
4) 如果M在某個獎品的權重范圍值內,標識這個獎品被抽取到

<?php/** * 獎品 */class Prize {  # ID  public $id = null;  # 權重  public $weight = null;  # 獎品名  public $name = null;   # 權重范圍區間起始值  protected $start = 0;  # 權重范圍區間結束值  protected $end = 0;   public function __construct($id, $weight, $name) {    if (!$id) {      throw new Exception('獎品ID為空.');    }    $this->id = $id;    $this->weight = $weight ? $weight : 0;    $this->name = $name ? $name : '隨機獎品' . $id;  }   # id  public function getId() {    return $this->id;  }   # 權重  public function getWeight() {    return $this->weight;  }   # 設置權重范圍區間  public function setRange($start, $end) {    $this->start = $start;    $this->end = $end;  }   # 判斷隨機數是否在權重范圍區間  public function inRange($num) {    return ($num >= $this->start) && ($num <= $this->end);  }} /** * 獎品池 */class PrizePoll implements IteratorAggregate, Countable {  # 獎品集  protected $items = array();   # 加入獎品  public function addItem(Prize $item) {    $this->items[$item->getId()] = $item;    return $this;  }   # 刪除獎品  public function removeItem($itemId) {    if (isset($this->items[$itemId])) {      unset($this->items[$itemId]);    }    return $this;  }   # 更新獎品  public function updateItem(Prize $item) {    if (isset($this->items[$item->getId()])) {      $this->items[$item->getId()] = $item;    }    return $this;  }   # 獲取所有獎品  public function getItems() {    return $this->items;  }   # 所有所有可用獎品(如果權重為0,說明這個獎品永遠不可能抽到)  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 function getIterator() {    return new ArrayIterator($this->items);  }} /** * 簡單的抽獎類 */class SimpleTurn {  # 獎池  protected $poll = null;     public function __construct(PrizePoll $poll) {    if ($poll) {      $this->setPoll($poll);    }  }   # 抽獎  public function run(PrizePoll $poll) {    $poll = $poll ? $poll : $this->poll;    if ( ! $poll) {      throw new Exception('獎池未初始化');    }     if ($poll->count() <= 0) {      throw new Exception('獎池為空');    }     $items = $poll->getVisibleItems();    if (count($items) <= 0) {      throw new Exception('獎池為空');    }     $sum = 0;    foreach ($items as $item) {      $start = $sum + 1;      $sum += $item->getWeight();      $end = $sum;       # 設置獎品的權重范圍區間      $item->setRange($start, $end);    }     # 隨機數    $rand = $this->getRandNum(1, $sum);     # 區間段判斷    foreach ($items as $item) {      if ($item->inRange($rand)) {        return $item;      }    }    return null;  }   # 獲取隨機數  public function getRandNum($min, $max) {    return mt_rand($min ? $min : 1, $max);  }   # 設置獎池  public function setPoll(PrizePoll $poll) {    $this->poll = $poll;  }} # 示例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);}


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本最新高清不卡中文字幕| 欧美日韩国内自拍| 日韩成人xxxx| 国产精品伦子伦免费视频| 精品国产福利视频| 精品精品国产国产自在线| 亚洲综合中文字幕在线观看| 69国产精品成人在线播放| 久久久久久国产三级电影| 久久久久久久久久久成人| 欧美放荡办公室videos4k| 欧美激情中文字幕乱码免费| 91av在线播放视频| 成人xxxxx| 国产视频999| 国产91精品久久久久| 欧美第一页在线| 中文字幕欧美精品日韩中文字幕| 日韩欧美一区二区在线| 亚洲综合第一页| 国产精品99久久久久久久久| 亚洲va男人天堂| 大伊人狠狠躁夜夜躁av一区| 国产91精品久久久久| 午夜精品免费视频| 国产精品成熟老女人| 日韩精品免费综合视频在线播放| 欧美性理论片在线观看片免费| 亚洲毛片在线免费观看| 亚洲天堂开心观看| 亚洲二区在线播放视频| 欧美日韩一区免费| 日韩电影大片中文字幕| 欧美激情一区二区三区高清视频| 成人午夜小视频| 国内精品免费午夜毛片| 亚洲最大中文字幕| 亚洲片av在线| 欧美视频免费在线观看| 欧美性xxxxhd| 久久精品中文字幕| 久久成人综合视频| 亚洲午夜女主播在线直播| 国产在线高清精品| 欧美日韩国内自拍| 欧美亚洲成人精品| 欧美精品在线视频观看| 亚洲国产成人精品女人久久久| 欧美高跟鞋交xxxxxhd| 亚洲精品国偷自产在线99热| 国产女同一区二区| 欧美性精品220| 精品亚洲一区二区三区在线播放| 亚洲最大激情中文字幕| 中文字幕少妇一区二区三区| 欧美性猛交xxxx久久久| 91免费人成网站在线观看18| 在线电影欧美日韩一区二区私密| 97香蕉超级碰碰久久免费软件| 国产一区二区久久精品| 在线播放日韩欧美| 不卡av电影在线观看| 一本久久综合亚洲鲁鲁| 国产伦精品一区二区三区精品视频| 国产精品狼人色视频一区| 午夜精品久久久久久久白皮肤| 91精品国产综合久久香蕉的用户体验| 午夜精品99久久免费| 俺去了亚洲欧美日韩| 国产精品网红直播| 久久五月天综合| 国产精品国产福利国产秒拍| 国产精品91在线观看| 欧美精品制服第一页| 亚洲激情视频在线观看| 久久精品一区中文字幕| 日韩欧美第一页| 欧美日韩免费观看中文| 亚洲精品日韩av| 欧美日韩免费在线| 亚洲а∨天堂久久精品9966| 国产在线观看一区二区三区| 91精品一区二区| 中文字幕精品国产| 91热精品视频| 亚洲午夜精品视频| 亚洲天堂av在线免费观看| 黄色精品在线看| 亚洲аv电影天堂网| 国产精品久久激情| 亚洲xxxx做受欧美| 欧美精品videosex牲欧美| 久久精品国产久精国产一老狼| 日韩大陆毛片av| 亚洲欧美国产精品| 亚洲激情成人网| 成人免费视频在线观看超级碰| 日韩极品精品视频免费观看| 中文字幕欧美视频在线| 九九精品在线视频| 中文字幕国产精品久久| 青青草一区二区| 亚洲欧美日韩成人| 国产精品久久久久久久午夜| 日韩在线激情视频| 97精品国产97久久久久久| 国产欧美一区二区三区四区| 欧美午夜精品久久久久久久| 91久久久久久国产精品| 欧美性开放视频| 国产这里只有精品| 国产98色在线| 久久久最新网址| 日韩在线高清视频| 亚洲精品短视频| 亚洲视频第一页| 97在线看免费观看视频在线观看| 国产精品电影久久久久电影网| 亚洲欧美国产高清va在线播| 亚洲精品久久久久久久久| 欧美激情一区二区三区久久久| 国产中文字幕亚洲| 在线观看视频99| 91黑丝高跟在线| 国内精品模特av私拍在线观看| 黑人极品videos精品欧美裸| 日韩免费在线电影| 久久精品99久久香蕉国产色戒| 久久精品国产欧美亚洲人人爽| 欧美一区二粉嫩精品国产一线天| 亚洲精品视频中文字幕| 91精品啪在线观看麻豆免费| 欧美美女18p| 国产精品啪视频| 欧美日韩视频免费播放| 亚洲精品第一页| 色婷婷av一区二区三区在线观看| 91精品久久久久久综合乱菊| 午夜精品久久久99热福利| 亚洲性av网站| 在线亚洲国产精品网| www.亚洲男人天堂| 日韩久久精品电影| 26uuu另类亚洲欧美日本一| 精品久久香蕉国产线看观看gif| 欧美老妇交乱视频| 九九热精品视频国产| 日韩欧美亚洲一二三区| 日韩高清av一区二区三区| 亚洲尤物视频网| 日韩欧美精品免费在线| 亚洲无限乱码一二三四麻| 国产亚洲精品久久久久动| 国产一区二区三区在线观看视频| 成人国产精品一区| 国产日韩欧美在线视频观看| 欧美午夜性色大片在线观看| 亚洲跨种族黑人xxx| 亚洲福利视频网站| 欧美性极品少妇精品网站| 久热99视频在线观看| 久久人人爽人人爽人人片亚洲| 激情成人中文字幕| 国产成人欧美在线观看|