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)文章
php下實(shí)現(xiàn)偽 url 的超簡(jiǎn)單方法[轉(zhuǎn)]
php下實(shí)現(xiàn)偽 url 的超簡(jiǎn)單方法[轉(zhuǎn)]...2007-09-09PHP正則表達(dá)式過(guò)濾html標(biāo)簽屬性(DEMO)
這篇文章主要介紹了PHP正則表達(dá)式過(guò)濾html標(biāo)簽屬性的相關(guān)內(nèi)容,實(shí)用性非常,感興趣的朋友參考下吧2016-05-05PHP中的日期時(shí)間處理利器實(shí)例(Carbon)
本篇文章主要介紹了PHP中的日期時(shí)間處理利器實(shí)例(Carbon),具有一定的參考價(jià)值,有興趣的可以了解一下2017-06-06Laravel使用模型實(shí)現(xiàn)like模糊查詢的例子
今天小編就為大家分享一篇Laravel使用模型實(shí)現(xiàn)like模糊查詢的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10關(guān)于PHP中Session文件過(guò)多的問(wèn)題及session文件保存位置
PHP的默認(rèn)機(jī)制:每一次php請(qǐng)求,會(huì)有1/100的概率(默認(rèn)值)觸發(fā)“session回收”。接下來(lái)通過(guò)本文給大家介紹關(guān)于PHP中Session文件過(guò)多的問(wèn)題及session文件保存位置,需要的朋友參考下2016-03-03PHP設(shè)計(jì)模式(七)組合模式Composite實(shí)例詳解【結(jié)構(gòu)型】
這篇文章主要介紹了PHP設(shè)計(jì)模式:組合模式Composite,結(jié)合實(shí)例形式詳細(xì)分析了PHP組合模式Composite基本概念、功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-05-05php實(shí)現(xiàn)面包屑導(dǎo)航例子分享
這篇文章主要為大家分享了php實(shí)現(xiàn)面包屑導(dǎo)航例子,感興趣的小伙伴們可以參考一下2015-12-12