亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PHP概率計算函數匯總

2024-05-04 23:39:01
字體:
來源:轉載
供稿:網友

做項目的有時會弄個活動什么的,來讓用戶參加,既吸引用戶注冊,又提高網站的用戶活躍度。同時參加的用戶會獲得一定的獎品,有100%中獎的,也有按一定概率中獎的,大的比如中個ipad,小的中個Q幣。那么我們在程序里必然會設計到算法,即按照一定的概率讓用戶獲得獎品。

其實發這篇博感覺并沒有什么用,太簡單了,會的人不屑看,不會的人自已動動腦子也想到了。但是看著自已的博客已經這么久沒更,真心疼~。粗略算下一篇只有代碼的水文,會占用OSC至少十幾KB的數據庫空間呢,但是,一想到亂彈里的然并卵,也就釋然了。

 

 
  1. <?php 
  2.  
  3. /** 
  4. * 概率計算類 
  5. * 可用于抽獎等 
  6. */ 
  7. class Probability 
  8. /** 
  9. * 概率統計數據 
  10. * thing => chance 
  11. */ 
  12. var $data = array(); 
  13. var $chance_count = 0; 
  14.  
  15. function __construct($initdata = array()){ 
  16. if(!empty($initdata)){ 
  17. $this->data = $initdata; 
  18. foreach($initdata as $d){ 
  19. $this->chance_count += $d['num']; 
  20.  
  21. function addData($name, $chance){ 
  22. $this->data[]=array('name'=>$name, 'num'=>$chance); 
  23. $this->chance_count += $chance; 
  24.  
  25. function getOne(){ 
  26. $index = rand(0, $this->chance_count); 
  27. foreach($this->data as $d){ 
  28. $index = $index-$d['num']; 
  29. if($index<=0){ 
  30. return $d['name']; 
  31. return ''
  32.  
  33.  
  34. /** 
  35. * 使用示例 
  36. */ 
  37. $pro=new Probability(); 
  38. $pro->addData('iphone',10); 
  39. $pro->addData('watch',30); 
  40. $pro->addData('$18',50); 
  41. $pro->addData('thank you',10); 
  42. $pro->addData('super big',1); 
  43. for($i=0;$i<100;$i++){ 
  44. echo $pro->getOne()."/n"

這是一個很經典的概率算法函數:

 

 
  1. function get_rand($proArr) {  
  2. $result = '';  
  3. //概率數組的總概率精度  
  4. $proSum = array_sum($proArr);  
  5. //概率數組循環  
  6. foreach ($proArr as $key => $proCur) {  
  7. $randNum = mt_rand(1, $proSum); //抽取隨機數 
  8. if ($randNum <= $proCur) {  
  9. $result = $key; //得出結果 
  10. break;  
  11. else {  
  12. $proSum -= $proCur;  
  13. }  
  14. }  
  15. unset ($proArr);  
  16. return $result;  

假設:我們有這樣一個數組:a獎概率20%,b獎概率30%,c獎概率50%

 

 
  1. $prize_arr =array('a'=>20,'b'=>30,'c'=>50); 

模擬函數執行過程:

總概率精度為20+30+50=100

第一次數組循環,$procur=20

假設抽取的隨機數rand(1,100),假設抽到$randNum=55

if判斷-------

如果$randNum<=20,則result=a

否則進入下一循環,總概率精度變為100-20=80

第二次數組循環,$procur=30

假設抽取的隨機數rand(1,80),假設抽到$randNum=33

if判斷---------

如果$randNum<=30,則result=b

否則進入下一循環,總概率精度變為80-30=50

第三次數組循環,$prosur=50;

假設抽取的隨機數rand(1,50),不管怎么抽,隨機數都會<或=50,

那么得出result=c;

因為樣本沒有改變,雖然可能抽取的隨機數不止一個,但是概率是不變的。

或者也可以這樣:

 

 
  1. function get_rand($arr) 
  2. $pro_sum=array_sum($arr); 
  3. $rand_num=mt_rand(1,$pro_sum); 
  4. $tmp_num=0; 
  5. foreach($arr as $k=>$val) 
  6. {  
  7. if($rand_num<=$val+$tmp_num) 
  8. $n=$k; 
  9. break
  10. }else 
  11. $tmp_num+=$val; 
  12. return $n; 

在給大家分享一個抽獎的概率算法

 

 
  1. /* 
  2. * 經典的概率算法, 
  3. * $proArr是一個預先設置的數組, 
  4. * 假設數組為:array(100,200,300,400), 
  5. * 開始是從1,1000 這個概率范圍內篩選第一個數是否在他的出現概率范圍之內,  
  6. * 如果不在,則將概率空間,也就是k的值減去剛剛的那個數字的概率空間, 
  7. * 在本例當中就是減去100,也就是說第二個數是在1,900這個范圍內篩選的。 
  8. * 這樣 篩選到最終,總會有一個數滿足要求。 
  9. * 就相當于去一個箱子里摸東西, 
  10. * 第一個不是,第二個不是,第三個還不是,那最后一個一定是。 
  11. * 這個算法簡單,而且效率非常 高, 
  12. * 關鍵是這個算法已在我們以前的項目中有應用,尤其是大數據量的項目中效率非常棒。 
  13. */ 
  14. function get_rand($proArr) { 
  15. $result = ''
  16. //概率數組的總概率精度  
  17. $proSum = array_sum($proArr); 
  18. //概率數組循環  
  19. foreach ($proArr as $key => $proCur) { 
  20. $randNum = mt_rand(1, $proSum); 
  21. if ($randNum <= $proCur) { 
  22. $result = $key; 
  23. break
  24. else { 
  25. $proSum -= $proCur; 
  26. unset ($proArr); 
  27. return $result; 
  28.  
  29.  
  30. /* 
  31. * 獎項數組 
  32. * 是一個二維數組,記錄了所有本次抽獎的獎項信息, 
  33. * 其中id表示中獎等級,prize表示獎品,v表示中獎概率。 
  34. * 注意其中的v必須為整數,你可以將對應的 獎項的v設置成0,即意味著該獎項抽中的幾率是0, 
  35. * 數組中v的總和(基數),基數越大越能體現概率的準確性。 
  36. * 本例中v的總和為100,那么平板電腦對應的 中獎概率就是1%, 
  37. * 如果v的總和是10000,那中獎概率就是萬分之一了。 
  38.  
  39. */ 
  40. $prize_arr = array( 
  41. '0' => array('id'=>1,'prize'=>'平板電腦','v'=>1), 
  42. '1' => array('id'=>2,'prize'=>'數碼相機','v'=>5), 
  43. '2' => array('id'=>3,'prize'=>'音箱設備','v'=>10), 
  44. '3' => array('id'=>4,'prize'=>'4G優盤','v'=>12), 
  45. '4' => array('id'=>5,'prize'=>'10Q幣','v'=>22), 
  46. '5' => array('id'=>6,'prize'=>'下次沒準就能中哦','v'=>50), 
  47. ); 
  48.  
  49. /* 
  50. * 每次前端頁面的請求,PHP循環獎項設置數組, 
  51. * 通過概率計算函數get_rand獲取抽中的獎項id。 
  52. * 將中獎獎品保存在數組$res['yes']中, 
  53. * 而剩下的未中獎的信息保存在$res['no']中, 
  54. * 最后輸出json個數數據給前端頁面。 
  55. */ 
  56. foreach ($prize_arr as $key => $val) { 
  57. $arr[$val['id']] = $val['v']; 
  58. $rid = get_rand($arr); //根據概率獲取獎項id  
  59.  
  60. $res['yes'] = $prize_arr[$rid-1]['prize']; //中獎項  
  61. unset($prize_arr[$rid-1]); //將中獎項從數組中剔除,剩下未中獎項  
  62. shuffle($prize_arr); //打亂數組順序  
  63. for($i=0;$i<count($prize_arr);$i++){ 
  64. $pr[] = $prize_arr[$i]['prize']; 
  65. $res['no'] = $pr; 
  66. print_r($res['yes']); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久夜色精品亚洲噜噜国产mv| 国产精品美女主播在线观看纯欲| 91精品国产91久久久久久不卡| 日韩一区二区精品视频| 久久亚洲成人精品| 亚洲韩国欧洲国产日产av| 国产网站欧美日韩免费精品在线观看| 久久影视电视剧免费网站| 91在线精品播放| www.日韩欧美| 亚洲人成网站在线播| 亚洲国产精品免费| 欧美色视频日本版| 国产精品欧美在线| 伦理中文字幕亚洲| 色综合伊人色综合网| 丝袜美腿亚洲一区二区| 成人国产精品一区| 亚洲国产小视频在线观看| 欧美午夜视频一区二区| 国产一区二区香蕉| 亚洲男人天堂2019| 久久久久久久久久久91| 日韩精品高清在线| 日韩电影大片中文字幕| 狠狠色狠狠色综合日日五| zzjj国产精品一区二区| 国产精品久久久久久久久久尿| 亚洲级视频在线观看免费1级| 91精品国产综合久久香蕉的用户体验| 日韩精品中文字幕在线| 国产999精品| 国模私拍一区二区三区| 26uuu另类亚洲欧美日本一| 日本aⅴ大伊香蕉精品视频| 夜夜嗨av一区二区三区免费区| 日本欧美国产在线| 日韩高清有码在线| 色妞在线综合亚洲欧美| 欧美精品在线极品| 日韩电视剧免费观看网站| 国产中文字幕日韩| 欧美综合在线观看| 亚洲美女av在线| 欧美日韩在线免费观看| 日韩成人av网| 亚洲电影免费观看高清完整版在线| 亚洲美女又黄又爽在线观看| 美女视频久久黄| 欧美丰满老妇厨房牲生活| 国产精品久久久久久亚洲调教| 一区国产精品视频| 国产v综合v亚洲欧美久久| www.日韩.com| 日韩成人黄色av| 97成人精品区在线播放| 日韩资源在线观看| 大伊人狠狠躁夜夜躁av一区| 91香蕉嫩草神马影院在线观看| 色综合视频一区中文字幕| 日韩精品在线视频| 最新69国产成人精品视频免费| 成人黄色短视频在线观看| 亚洲人午夜精品| 精品在线小视频| 国产精品吊钟奶在线| 国产一区二区视频在线观看| 91精品国产91久久久久| 欧美黄色性视频| 欧美日韩免费网站| 亚洲成人黄色网址| 欧美精品久久久久久久久| 欧美综合国产精品久久丁香| 国产精品色婷婷视频| 久久亚洲精品网站| 国产精品免费看久久久香蕉| 福利视频一区二区| 日韩在线资源网| 亚洲第一福利视频| 91精品国产网站| 精品视频—区二区三区免费| 久久久亚洲成人| 久久精品久久久久久| 日韩黄色在线免费观看| 91超碰caoporn97人人| 亚洲欧美日韩视频一区| 九九热精品在线| 国产美女精品免费电影| 国内精品模特av私拍在线观看| 国产一区视频在线| 亚洲在线观看视频网站| 91亚洲国产成人精品性色| 欧美黑人一级爽快片淫片高清| 亚洲高清免费观看高清完整版| 国产精品专区h在线观看| 91精品视频免费观看| 欧美色道久久88综合亚洲精品| 欧美中文字幕精品| 欧洲成人午夜免费大片| 日韩国产高清视频在线| 日韩高清免费在线| 国产有码一区二区| 中文字幕久久久av一区| 欧美一区在线直播| 欧美日韩精品在线| 国产精品色婷婷视频| 777午夜精品福利在线观看| 亚洲欧美综合v| 亚洲色图偷窥自拍| 亚洲欧美国产精品va在线观看| 久久综合五月天| 一区二区三区国产在线观看| 亚洲最大成人在线| 久久久久日韩精品久久久男男| 青草青草久热精品视频在线网站| 欧美精品在线视频观看| 色妞欧美日韩在线| 欧美成年人视频网站欧美| 最新日韩中文字幕| 国产精品欧美日韩| 国产精品久久久久久久久男| 欧美最猛性xxxxx免费| 亚洲欧美日韩国产精品| 精品日韩中文字幕| 欧美性生活大片免费观看网址| 日韩av在线精品| 欧美激情影音先锋| 亚洲网在线观看| 国产精品入口日韩视频大尺度| 中文字幕亚洲欧美一区二区三区| 亚洲欧美激情精品一区二区| 亚洲va欧美va在线观看| 这里只有精品久久| 亚洲国产成人精品一区二区| 国产日韩欧美日韩| 国产视频一区在线| 精品一区电影国产| 成人精品在线视频| 久久久在线免费观看| 久久久极品av| 国产精品一区二区性色av| 国产成人激情视频| 亚洲va欧美va国产综合剧情| 青草热久免费精品视频| 亚洲区免费影片| 亚洲午夜性刺激影院| 97人洗澡人人免费公开视频碰碰碰| 久久久www成人免费精品张筱雨| 国产在线观看一区二区三区| 国产女精品视频网站免费| 中文字幕久热精品在线视频| 国产偷国产偷亚洲清高网站| 欧美高清视频在线播放| www.久久色.com| 色777狠狠综合秋免鲁丝| 亚洲精品suv精品一区二区| 一夜七次郎国产精品亚洲| 欧美成人精品一区二区三区| 亚洲国产精品美女| 欧美性理论片在线观看片免费| 日韩中文字幕精品| 欧美亚洲日本网站| 国产在线视频2019最新视频| 欧美另类99xxxxx|