国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP概率計算函數匯總

2020-03-22 18:20:18
字體:
來源:轉載
供稿:網友
其實發這篇博感覺并沒有什么用,太簡單了,會的人不屑看,不會的人自已動動腦子也想到了。但是看著自已的博客已經這么久沒更,真心疼~。粗略算下一篇只有代碼的水文,會占用OSC至少十幾KB的數據庫空間呢,但是,一想到亂彈里的然并卵,也就釋然了。 * 概率計算類 * 可用于抽獎等html' target='_blank'>class Probability * 概率統計數據 * thing = chance var $data = array(); var $chance_count = 0; function __construct($initdata = array()){ if(!empty($initdata)){ $this- data = $initdata; foreach($initdata as $d){ $this- chance_count += $d['num']; function addData($name, $chance){ $this- data[]=array('name'= $name, 'num'= $chance); $this- chance_count += $chance; function getOne(){ $index = rand(0, $this- chance_count); foreach($this- data as $d){ $index = $index-$d['num']; if($index =0){ return $d['name']; return '';
第一次數組循環,$procur=20假設抽取的隨機數rand(1,100),假設抽到$randNum=55if判斷-------如果$randNum =20,則result=a否則進入下一循環,總概率精度變為100-20=80第二次數組循環,$procur=30假設抽取的隨機數rand(1,80),假設抽到$randNum=33if判斷---------如果$randNum =30,則result=b否則進入下一循環,總概率精度變為80-30=50第三次數組循環,$prosur=50;假設抽取的隨機數rand(1,50),不管怎么抽,隨機數都會 或=50,那么得出result=c;因為樣本沒有改變,雖然可能抽取的隨機數不止一個,但是概率是不變的。或者也可以這樣: function get_rand($arr) $pro_sum=array_sum($arr); $rand_num=mt_rand(1,$pro_sum); $tmp_num=0; foreach($arr as $k= $val) if($rand_num =$val+$tmp_num) $n=$k; break; }else $tmp_num+=$val; return $n;在給大家分享一個抽獎的概率算法 * 經典的概率算法, * $proArr是一個預先設置的數組, * 假設數組為:array(100,200,300,400), * 開始是從1,1000 這個概率范圍內篩選第一個數是否在他的出現概率范圍之內, * 如果不在,則將概率空間,也就是k的值減去剛剛的那個數字的概率空間, * 在本例當中就是減去100,也就是說第二個數是在1,900這個范圍內篩選的。 * 這樣 篩選到最終,總會有一個數滿足要求。 * 就相當于去一個箱子里摸東西, * 第一個不是,第二個不是,第三個還不是,那最后一個一定是。 * 這個算法簡單,而且效率非常 高, * 關鍵是這個算法已在我們以前的項目中有應用,尤其是大數據量的項目中效率非常棒。function get_rand($proArr) { $result = ''; //概率數組的總概率精度 $proSum = array_sum($proArr); //概率數組循環 foreach ($proArr as $key = $proCur) { $randNum = mt_rand(1, $proSum); if ($randNum = $proCur) { $result = $key; break; } else { $proSum -= $proCur; unset ($proArr); return $result;
* 是一個二維數組,記錄了所有本次抽獎的獎項信息, * 其中id表示中獎等級,prize表示獎品,v表示中獎概率。 * 注意其中的v必須為整數,你可以將對應的 獎項的v設置成0,即意味著該獎項抽中的幾率是0, * 數組中v的總和(基數),基數越大越能體現概率的準確性。 * 本例中v的總和為100,那么平板電腦對應的 中獎概率就是1%, * 如果v的總和是10000,那中獎概率就是萬分之一了。$prize_arr = array( '0' = array('id'= 1,'prize'= '平板電腦','v'= 1), '1' = array('id'= 2,'prize'= '數碼相機','v'= 5), '2' = array('id'= 3,'prize'= '音箱設備','v'= 10), '3' = array('id'= 4,'prize'= '4G優盤','v'= 12), '4' = array('id'= 5,'prize'= '10Q幣','v'= 22), '5' = array('id'= 6,'prize'= '下次沒準就能中哦','v'= 50), * 每次前端頁面的請求,PHP循環獎項設置數組, * 通過概率計算函數get_rand獲取抽中的獎項id。 * 將中獎獎品保存在數組$res['yes']中, * 而剩下的未中獎的信息保存在$res['no']中, * 最后輸出json個數數據給前端頁面。foreach ($prize_arr as $key = $val) { $arr[$val['id']] = $val['v'];$rid = get_rand($arr); //根據概率獲取獎項id $res['yes'] = $prize_arr[$rid-1]['prize']; //中獎項 unset($prize_arr[$rid-1]); //將中獎項從數組中剔除,剩下未中獎項 shuffle($prize_arr); //打亂數組順序 for($i=0;$i count($prize_arr);$i++){ $pr[] = $prize_arr[$i]['prize'];$res['no'] = $pr;print_r($res['yes']);PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安远县| 盐山县| 肇源县| 射阳县| 新丰县| 成都市| 兰溪市| 子长县| 靖宇县| 仙居县| 兴宁市| 积石山| 大化| 雷州市| 邵武市| 沁源县| 邯郸县| 大洼县| 准格尔旗| 绿春县| 舒兰市| 许昌市| 象山县| 临武县| 阿拉善左旗| 兰考县| 桐梓县| 香港| 军事| 勃利县| 黄梅县| 洛阳市| 新乐市| 小金县| 巢湖市| 民乐县| 五指山市| 新宁县| 航空| 沾化县| 延津县|