摘要:隨機(jī)數(shù)理論上是概率均等的,那么相應(yīng)的區(qū)間所含數(shù)的多少就體現(xiàn)了抽獎(jiǎng)物品概率的不同。
/* * 不同概率的抽獎(jiǎng)原理就是把0到*(比重總數(shù))的區(qū)間分塊 * 分塊的依據(jù)是物品占整個(gè)的比重,再根據(jù)隨機(jī)數(shù)種子來(lái)產(chǎn)生0-* 中的某個(gè)數(shù) * 判斷這個(gè)數(shù)是落在哪個(gè)區(qū)間上,區(qū)間對(duì)應(yīng)的就是抽到的那個(gè)物品。 * 隨機(jī)數(shù)理論上是概率均等的,那么相應(yīng)的區(qū)間所含數(shù)的多少就體現(xiàn)了抽獎(jiǎng)物品概率的不同。 */ function get_rand($proArr) { $result = array(); foreach ($proArr as $key => $val) { $arr[$key] = $val["v"]; } $proSum = array_sum($arr); // 計(jì)算總權(quán)重 $randNum = mt_rand(1, $proSum); $d1 = 0; $d2 = 0; for ($i=0; $i < count($arr); $i++) { $d2 += $arr[$i]; if($i==0) { $d1 = 0; } else { $d1 += $arr[$i-1]; } if($randNum >= $d1 && $randNum <= $d2) { $result = $proArr[$i]; } } unset ($arr); return $result; } /* * 使用較多的為這個(gè)方法 */ function get_rand1($proArr) { $result = array(); foreach ($proArr as $key => $val) { $arr[$key] = $val["v"]; } // 概率數(shù)組的總概率 $proSum = array_sum($arr); asort($arr); // 概率數(shù)組循環(huán) foreach ($arr as $k => $v) { $randNum = mt_rand(1, $proSum); if ($randNum <= $v) { $result = $proArr[$k]; break; } else { $proSum -= $v; } } return $result; }
/* * 獎(jiǎng)項(xiàng)數(shù)組 * 獎(jiǎng)品id,名稱,比重 */ $arr = array( array("id"=>1,"name"=>"特等獎(jiǎng)","v"=>1), array("id"=>2,"name"=>"一等獎(jiǎng)","v"=>5), array("id"=>3,"name"=>"二等獎(jiǎng)","v"=>10), array("id"=>4,"name"=>"三等獎(jiǎng)","v"=>12), array("id"=>5,"name"=>"四等獎(jiǎng)","v"=>22), array("id"=>6,"name"=>"沒(méi)中獎(jiǎng)","v"=>50) ); 測(cè)試結(jié)果(10000次): get_rand(): count_1:0 count_2:490 count_3:1021 count_4:1172 count_5:2172 count_6:5145 特等獎(jiǎng)中獎(jiǎng)率全為:0 get_rand1(): count_1:92 count_2:477 count_3:1017 count_4:1195 count_5:2264 count_6:4955 總體感覺(jué) get_rand1() 更準(zhǔn)確些......
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/22025.html
摘要:演示下載地址效果圖三個(gè)金蛋一把錘子及中獎(jiǎng)結(jié)果代碼如下錘子當(dāng)鼠標(biāo)滑向金蛋時(shí),錘子會(huì)僅靠金蛋右上方,通過(guò)來(lái)控制位置。當(dāng)揮動(dòng)錘子砸向金蛋前,我們先把金蛋中的數(shù)字編號(hào)隱藏起來(lái)。最后,我們向后臺(tái)發(fā)送一個(gè)請(qǐng)求,后臺(tái)程序會(huì)處理獎(jiǎng)項(xiàng)分配并把中獎(jiǎng)結(jié)果返回。 演示下載地址:http://www.erdangjiade.com/js...效果圖:showImg(https://segmentfault.co...
摘要:演示下載地址效果圖三個(gè)金蛋一把錘子及中獎(jiǎng)結(jié)果代碼如下錘子當(dāng)鼠標(biāo)滑向金蛋時(shí),錘子會(huì)僅靠金蛋右上方,通過(guò)來(lái)控制位置。當(dāng)揮動(dòng)錘子砸向金蛋前,我們先把金蛋中的數(shù)字編號(hào)隱藏起來(lái)。最后,我們向后臺(tái)發(fā)送一個(gè)請(qǐng)求,后臺(tái)程序會(huì)處理獎(jiǎng)項(xiàng)分配并把中獎(jiǎng)結(jié)果返回。 演示下載地址:http://www.erdangjiade.com/js...效果圖:showImg(https://segmentfault.co...
摘要:演示下載地址效果圖三個(gè)金蛋一把錘子及中獎(jiǎng)結(jié)果代碼如下錘子當(dāng)鼠標(biāo)滑向金蛋時(shí),錘子會(huì)僅靠金蛋右上方,通過(guò)來(lái)控制位置。當(dāng)揮動(dòng)錘子砸向金蛋前,我們先把金蛋中的數(shù)字編號(hào)隱藏起來(lái)。最后,我們向后臺(tái)發(fā)送一個(gè)請(qǐng)求,后臺(tái)程序會(huì)處理獎(jiǎng)項(xiàng)分配并把中獎(jiǎng)結(jié)果返回。 演示下載地址:http://www.erdangjiade.com/js...效果圖:showImg(https://segmentfault.co...
摘要:演示下載地址效果圖三個(gè)金蛋一把錘子及中獎(jiǎng)結(jié)果代碼如下錘子當(dāng)鼠標(biāo)滑向金蛋時(shí),錘子會(huì)僅靠金蛋右上方,通過(guò)來(lái)控制位置。當(dāng)揮動(dòng)錘子砸向金蛋前,我們先把金蛋中的數(shù)字編號(hào)隱藏起來(lái)。最后,我們向后臺(tái)發(fā)送一個(gè)請(qǐng)求,后臺(tái)程序會(huì)處理獎(jiǎng)項(xiàng)分配并把中獎(jiǎng)結(jié)果返回。 演示下載地址:http://www.erdangjiade.com/js...效果圖:showImg(https://segmentfault.co...
閱讀 2837·2021-09-28 09:45
閱讀 1510·2021-09-26 10:13
閱讀 905·2021-09-04 16:45
閱讀 3666·2021-08-18 10:21
閱讀 1092·2019-08-29 15:07
閱讀 2637·2019-08-29 14:10
閱讀 3150·2019-08-29 13:02
閱讀 2465·2019-08-29 12:31