<?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
相關文章
21Jul2016
php中透過陣列進行高效率隨機抽取指定筆記錄的演算法。 php使用陣列array_rand()函數進行高效隨機抽取指定條數的記錄,可以隨機抽取資料庫中的記錄,適合進行隨機展示和抽獎程序。 該演算法主要是
21Jul2016
PHP5試用(二)。抽象類別 抽象類別不能被實例化。 抽象類別與其它類別一樣,允許定義變數及方法。 抽象類別同樣可以定義一個抽象的方法,抽象類別的方法不會被執
03Jan2025
了解欄位初始化問題在您的程式碼中,您有一個儲存庫類別 (DinnerRepository) 和一個服務類別 (Service),它使用...
07Dec2024
在 NetBeans 中設定類別路徑在 NetBeans 中使用 Java 時,您可能需要調整類別路徑以包含其他程式庫或 JAR...