php實現(xiàn)根據(jù)中獎概率抽獎的算法
分享一個根據(jù)中獎概率抽獎的算法

項目開發(fā)中經(jīng)常會遇到抽獎的功能,因此抽獎算法應該是比較常見的。下面這個抽獎算法比較簡單,希望可以幫助需要的小伙伴們。
源代碼
<?php
function?lottery($prizes,?$probabilities)?{
????//?檢查參數(shù)
????if?(count($prizes)?!=?count($probabilities))?{
????????throw?new?Exception("兩個數(shù)組的元素不一致");
????}
????//?計算概率總和
????$totalProbability?=?array_sum($probabilities);
????//?生成一個隨機數(shù)
????$randomNumber?=?mt_rand(1,?$totalProbability);
????//?按概率順序循環(huán)
????$probabilitySum?=?0;
????for?($i?=?0;?$i?<?count($prizes);?$i++)?{
????????$probabilitySum?+=?$probabilities[$i];
????????if?($probabilitySum?>=?$randomNumber)?{
????????????return?$prizes[$i];
????????}
????}
}
//?示例用法
$prizes?=?array("獎品A",?"獎品B",?"獎品C",?"獎品D");
$probabilities?=?array(1,?2,?3,?4);?//?概率為?1/10,?2/10,?3/10,?4/10
$winner?=?lottery($prizes,?$probabilities);
echo?"中獎者獲得了:?$winner";
?>解析
這個算法接受兩個數(shù)組參數(shù):$prizes是獎品數(shù)組,$probabilities是概率數(shù)組。
每個獎品對應一個概率值,數(shù)組中的元素順序需要對應。
例如,如果$prizes[0]是"獎品A",$probabilities[0]是1,那么"獎品A"的中獎概率就是1/10。
- 算法首先檢查$prizes和$probabilities的元素個數(shù)是否相等,然后計算所有概率值的總和。
- 接下來,它生成一個隨機數(shù),然后按概率順序循環(huán),累加概率值,直到概率和大于或等于隨機數(shù)為止。
- 然后返回對應的獎品。
總結
這個算法是基于概率的隨機抽獎,可以根據(jù)實際需要進行修改和優(yōu)化。
以上就是php實現(xiàn)根據(jù)中獎概率抽獎的算法的詳細內容,更多關于php中獎概率抽獎算法的資料請關注腳本之家其它相關文章!
相關文章
去掉destoon資訊內容頁keywords關鍵字自帶的文章標題的方法
這篇文章主要介紹了去掉destoon資訊內容頁keywords關鍵字自帶的文章標題的方法,有一定的實用價值,需要的朋友可以參考下2014-08-08
Zend Framework動作助手Redirector用法實例詳解
這篇文章主要介紹了Zend Framework動作助手Redirector用法,結合實例形式詳細分析了轉向器Redirector的功能,使用方法與相關注意事項,需要的朋友可以參考下2016-03-03
php使用strtotime和date函數(shù)判斷日期是否有效代碼分享
php使用strtotime和date函數(shù)進行檢驗判斷日期是否有效代碼分享,大家參考使用吧2013-12-12
PHP各種異常和錯誤的攔截方法及發(fā)生致命錯誤時進行報警
在日常開發(fā)中,大多數(shù)人的做法是在開發(fā)環(huán)境時開啟調試模式,在產(chǎn)品環(huán)境關閉調試模式。在開發(fā)的時候可以查看各種錯誤、異常,但是在線上就把錯誤顯示的關閉2016-01-01

