<?php function get_rand($proArr) { $result = ''; //概率数组的总概率精度 $proSum = array_sum($proArr); //概率数组循环 foreach ($proArr as $key => $proCur) { $randNum = mt_rand(1, $proSum); if ($randNum <= $proCur) { $result = $key; break; } else { $proSum -= $proCur; } } unset ($proArr); return $result; }
獎項數組是一個二維數組,記錄了所有本次抽獎的獎項信息,其中id表示中獎等級,prize表示獎品,v表示中獎概率。注意其中的v必須為整數,你可以將對應的獎項的v設定成0,即意味著該獎項抽中的幾率是0,數組中v的總和(基數),基數越大越能體現機率的準確性。本例中v的總和為100,那麼平板電腦對應的 中獎機率就是1%,如果v的總和是10000,那中獎機率就是萬分之一了。 $proArr是一個預先設定的數組,假設數組為:array(100,200,300,400),開始是從1,1000 這個機率範圍內篩選第一個數是否在他的出現機率範圍之內,如果不在,則將機率空間,也就是k的值減去剛剛的那個數字的機率空間,在本例當中就是減去100,也就是說第二個數是在1,900這個範圍內篩選的。這樣 篩選到最終,總會有一個數滿足要求。就等於去一個箱子裡摸東西,第一個不是,第二個不是,第三個還不是,那最後一個一定是。這個演算法簡單,而且效率非常 高,關鍵是這個演算法已在我們先前的專案中有應用,尤其是大數據量的專案中效率非常棒。
本站所有資源皆由網友貢獻或各大下載網站轉載。請自行檢查軟體的完整性!本站所有資源僅供學習參考。請不要將它們用於商業目的。否則,一切後果都由您負責!如有侵權,請聯絡我們刪除。聯絡方式:admin@php.cn
相關文章
16 Aug 2017
那麼在我們工作中,不管是商城的,企業站等等一些主流網站,公司很多時候都會出現很多的限時活動,優惠活動,當然最重要的就要數抽獎活動了,很多公司都會用抽獎活動來吸引更多的客戶,那我們今天就跟大家講講這個抽獎中獎機率的演算法!
15 Nov 2017
在我們日常工作中,常常會於到一些抽獎的活動,那麼今天我們就給大家分享php中獎機率演算法,可用於刮刮卡,大轉盤等抽獎演算法。用法很簡單,程式碼裡有詳細註解說明,一看就懂,有需要的夥伴參考下吧。