php實(shí)現(xiàn)根據(jù)中獎(jiǎng)概率抽獎(jiǎng)的算法
分享一個(gè)根據(jù)中獎(jiǎng)概率抽獎(jiǎng)的算法

項(xiàng)目開(kāi)發(fā)中經(jīng)常會(huì)遇到抽獎(jiǎng)的功能,因此抽獎(jiǎng)算法應(yīng)該是比較常見(jiàn)的。下面這個(gè)抽獎(jiǎng)算法比較簡(jiǎn)單,希望可以幫助需要的小伙伴們。
源代碼
<?php
function?lottery($prizes,?$probabilities)?{
????//?檢查參數(shù)
????if?(count($prizes)?!=?count($probabilities))?{
????????throw?new?Exception("兩個(gè)數(shù)組的元素不一致");
????}
????//?計(jì)算概率總和
????$totalProbability?=?array_sum($probabilities);
????//?生成一個(gè)隨機(jī)數(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("獎(jiǎng)品A",?"獎(jiǎng)品B",?"獎(jiǎng)品C",?"獎(jiǎng)品D");
$probabilities?=?array(1,?2,?3,?4);?//?概率為?1/10,?2/10,?3/10,?4/10
$winner?=?lottery($prizes,?$probabilities);
echo?"中獎(jiǎng)?wù)攉@得了:?$winner";
?>解析
這個(gè)算法接受兩個(gè)數(shù)組參數(shù):$prizes是獎(jiǎng)品數(shù)組,$probabilities是概率數(shù)組。
每個(gè)獎(jiǎng)品對(duì)應(yīng)一個(gè)概率值,數(shù)組中的元素順序需要對(duì)應(yīng)。
例如,如果$prizes[0]是"獎(jiǎng)品A",$probabilities[0]是1,那么"獎(jiǎng)品A"的中獎(jiǎng)概率就是1/10。
- 算法首先檢查$prizes和$probabilities的元素個(gè)數(shù)是否相等,然后計(jì)算所有概率值的總和。
- 接下來(lái),它生成一個(gè)隨機(jī)數(shù),然后按概率順序循環(huán),累加概率值,直到概率和大于或等于隨機(jī)數(shù)為止。
- 然后返回對(duì)應(yīng)的獎(jiǎng)品。
總結(jié)
這個(gè)算法是基于概率的隨機(jī)抽獎(jiǎng),可以根據(jù)實(shí)際需要進(jìn)行修改和優(yōu)化。
以上就是php實(shí)現(xiàn)根據(jù)中獎(jiǎng)概率抽獎(jiǎng)的算法的詳細(xì)內(nèi)容,更多關(guān)于php中獎(jiǎng)概率抽獎(jiǎng)算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
去掉destoon資訊內(nèi)容頁(yè)keywords關(guān)鍵字自帶的文章標(biāo)題的方法
這篇文章主要介紹了去掉destoon資訊內(nèi)容頁(yè)keywords關(guān)鍵字自帶的文章標(biāo)題的方法,有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-08-08
Zend Framework動(dòng)作助手Redirector用法實(shí)例詳解
這篇文章主要介紹了Zend Framework動(dòng)作助手Redirector用法,結(jié)合實(shí)例形式詳細(xì)分析了轉(zhuǎn)向器Redirector的功能,使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-03-03
php使用strtotime和date函數(shù)判斷日期是否有效代碼分享
php使用strtotime和date函數(shù)進(jìn)行檢驗(yàn)判斷日期是否有效代碼分享,大家參考使用吧2013-12-12
laravel框架中表單請(qǐng)求類(lèi)型和CSRF防護(hù)實(shí)例分析
這篇文章主要介紹了laravel框架中表單請(qǐng)求類(lèi)型和CSRF防護(hù),結(jié)合實(shí)例形式分析了laravel框架常見(jiàn)請(qǐng)求方法、提交請(qǐng)求以及csrf令牌的驗(yàn)證相關(guān)操作技巧,需要的朋友可以參考下2019-11-11
如何利用微信小程序和php實(shí)現(xiàn)即時(shí)通訊聊天功能
微信小程序是現(xiàn)在應(yīng)用比較廣的流量平臺(tái)之一,當(dāng)小程序的流量越來(lái)越多時(shí),就需要在小程序中接入即時(shí)通信聊天功能來(lái)實(shí)現(xiàn)更好的流量變現(xiàn)轉(zhuǎn)化,下面這篇文章主要給大家介紹了關(guān)于如何利用微信小程序和php實(shí)現(xiàn)即時(shí)通訊聊天功能的相關(guān)資料,需要的朋友可以參考下2022-04-04
thinkphp的dump函數(shù)無(wú)輸出實(shí)例代碼
下面小編就為大家?guī)?lái)一篇thinkphp的dump函數(shù)無(wú)輸出實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
PHP各種異常和錯(cuò)誤的攔截方法及發(fā)生致命錯(cuò)誤時(shí)進(jìn)行報(bào)警
在日常開(kāi)發(fā)中,大多數(shù)人的做法是在開(kāi)發(fā)環(huán)境時(shí)開(kāi)啟調(diào)試模式,在產(chǎn)品環(huán)境關(guān)閉調(diào)試模式。在開(kāi)發(fā)的時(shí)候可以查看各種錯(cuò)誤、異常,但是在線(xiàn)上就把錯(cuò)誤顯示的關(guān)閉2016-01-01

