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ù)中獎概率抽獎的算法的詳細內(nèi)容,更多關于php中獎概率抽獎算法的資料請關注腳本之家其它相關文章!
相關文章
Laravel使用模型實現(xiàn)like模糊查詢的例子
今天小編就為大家分享一篇Laravel使用模型實現(xiàn)like模糊查詢的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10關于PHP中Session文件過多的問題及session文件保存位置
PHP的默認機制:每一次php請求,會有1/100的概率(默認值)觸發(fā)“session回收”。接下來通過本文給大家介紹關于PHP中Session文件過多的問題及session文件保存位置,需要的朋友參考下2016-03-03PHP設計模式(七)組合模式Composite實例詳解【結構型】
這篇文章主要介紹了PHP設計模式:組合模式Composite,結合實例形式詳細分析了PHP組合模式Composite基本概念、功能、原理、用法及操作注意事項,需要的朋友可以參考下2020-05-05