日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > php教程 > php生成多個(gè)不重復(fù)的隨機(jī)數(shù)實(shí)例程序

php生成多個(gè)不重復(fù)的隨機(jī)數(shù)實(shí)例程序

來(lái)源:程序員人生   發(fā)布時(shí)間:2014-05-16 08:01:08 閱讀次數(shù):3451次

在php中生成隨機(jī)數(shù)據(jù)直接使用mt_rand就可以實(shí)現(xiàn)了,如果要生成不重復(fù)隨機(jī)數(shù)我們可以使用 unique_rand 函數(shù)了,實(shí)例代碼如下:

  1. <?php  
  2. //range 是將1到100 列成一個(gè)數(shù)組  
  3. $numbers = range (1,100);  
  4. //shuffle 將數(shù)組順序隨即打亂  
  5. shuffle ($numbers);  
  6. //array_slice 取該數(shù)組中的某一段  
  7. $no=6;  
  8. $result = array_slice($numbers,0,$no);  
  9. for ($i=0;$i<$no;$i++){  
  10. echo $result[$i]."<br>";  
  11. }  
  12. print_r($result);  
  13. ?> 
  14. //range 是將1到42 列成一個(gè)數(shù)組  
  15. $numbers = range (1,42);  
  16. //shuffle 將數(shù)組順序隨即打亂  
  17. shuffle ($numbers);  
  18. //array_slice 取該數(shù)組中的某一段  
  19. $result = array_slice($numbers,0,3);  
  20. print_r($result); 

實(shí)例代碼二如下:

  1. <?php  
  2. $numbers = range (1,20);  
  3. srand ((float)microtime()*1000000);  
  4. shuffle ($numbers);  
  5. while (list (, $number) = each ($numbers)) {  
  6. echo "$number ";  
  7. }  
  8. ?> 

實(shí)例代碼三,用PHP,在1-20間隨機(jī)產(chǎn)生5個(gè)不重復(fù)的值,代碼如下:

  1. <?php  
  2. function NoRand($begin=0,$end=20,$limit=5){  
  3. $rand_array=range($begin,$end);  
  4. shuffle($rand_array);//調(diào)用現(xiàn)成的數(shù)組隨機(jī)排列函數(shù)  
  5. return array_slice($rand_array,0,$limit);//截取前$limit個(gè)  
  6. }  
  7. print_r(NoRand());  
  8. ?> 

或者不shuffle的話,代碼如下:

  1. <?php  
  2. $tmp=array();  
  3. while(count($tmp)<5){  
  4. $tmp[]=mt_rand(1,20);  
  5. $tmp=array_unique($tmp);  
  6. }  
  7. print join(',',$tmp);  
  8. ?> 

上面都是紙上談兵了,下面來(lái)真實(shí)的了,要求如下:

有25幅作品拿去投票,一次投票需要選16幅,單個(gè)作品一次投票只能選擇一次,前面有個(gè)程序員捅了漏子,忘了把投票入庫(kù),有200個(gè)用戶產(chǎn)生的投票序列為空,那么你會(huì)如何填補(bǔ)這個(gè)漏子?

當(dāng)然向上級(jí)反映情況,但是我們這里討論的是技術(shù),就是需要生成1-25之間的16個(gè)不重復(fù)的隨機(jī)數(shù),去填補(bǔ),具體怎么設(shè)計(jì)函數(shù)呢?將隨機(jī)數(shù)存入數(shù)組,再在數(shù)組中去除重復(fù)的值,即可生成一定數(shù)量的不重復(fù)隨機(jī)數(shù),代碼如下:

  1. <?php 
  2. /* 
  3. * array unique_rand( int $min, int $max, int $num ) 
  4. * 生成一定數(shù)量的不重復(fù)隨機(jī)數(shù) 
  5. * $min 和 $max: 指定隨機(jī)數(shù)的范圍 
  6. * $num: 指定生成數(shù)量 
  7. */ 
  8. function unique_rand($min$max$num) { 
  9.     $count = 0; 
  10.     $return = array(); 
  11.     while ($count < $num) { 
  12.         $return[] = mt_rand($min$max); 
  13.         $return = array_flip(array_flip($return)); 
  14.         $count = count($return); 
  15.     } 
  16.     shuffle($return); 
  17.     return $return
  18. $arr = unique_rand(1, 25, 16); 
  19. sort($arr); 
  20. $result = ''
  21. for($i=0; $i < count($arr);$i++) 
  22.  $result .= $arr[$i].','
  23. $result = substr($result, 0, -1); 
  24. echo $result
  25. ?> 

程序運(yùn)行如下:1 2,3,4,6,7,8,9,10,11,12,13,16,20,21,22,24

補(bǔ)充幾點(diǎn)說(shuō)明:

•生成隨機(jī)數(shù)時(shí)用了 mt_rand() 函數(shù)。這個(gè)函數(shù)生成隨機(jī)數(shù)的平均速度要比 rand() 快四倍。

•去除數(shù)組中的重復(fù)值時(shí)用了“翻翻法”,就是用 array_flip() 把數(shù)組的 key 和 value 交換兩次。這種做法比用 array_unique() 快得多。

•返回?cái)?shù)組前,先使用 shuffle() 為數(shù)組賦予新的鍵名,保證鍵名是 0-n 連續(xù)的數(shù)字。如果不進(jìn)行此步驟,可能在刪除重復(fù)值時(shí)造成鍵名不連續(xù),給遍歷帶來(lái)麻煩。

再看一個(gè)實(shí)例:生成0-z這36個(gè)字符中的一個(gè)。每次調(diào)用 getOptions() 方法生成一個(gè)字符,它們的存儲(chǔ)如下:array[0] = 0, array[1] = 1, ……, array[35] = z,代碼如下:

  1. Array (  
  2.  [0] => 0  
  3.  [1] => 1  
  4.  [2] => 2  
  5.  [3] => 3  
  6.  [4] => 4  
  7.  [5] => 5  
  8.  [6] => 6  
  9.  [7] => 7  
  10.  [8] => 8  
  11.  [9] => 9  
  12.  [10] => a  
  13.  [11] => b  
  14.  [12] => c  
  15.  [13] => d  
  16.  [14] => e  
  17.  [15] => f  
  18.  [16] => g  
  19.  [17] => h  
  20.  [18] => i  
  21.  [19] => j  
  22.  [20] => k  
  23.  [21] => l  
  24.  [22] => m  
  25.  [23] => n  
  26.  [24] => o  
  27.  [25] => p  
  28.  [26] => q  
  29.  [27] => r  
  30.  [28] => s  
  31.  [29] => t  
  32.  [30] => u  
  33.  [31] => v  
  34.  [32] => w  
  35.  [33] => x  
  36.  [34] => y  
  37.  [35] => z  

然后在0-35之間隨機(jī)生成一個(gè)數(shù)作為索引,其實(shí)就是在上面數(shù)組中隨機(jī)取出一個(gè)數(shù),作為變量 $result 中的第一個(gè)字符,這個(gè)隨機(jī)索引隨后會(huì)被賦值成數(shù)組最后一個(gè),它將不會(huì)參與下一輪的隨機(jī)選取,代碼如下:

  1. <?php 
  2. // 生成0123456789abcdefghijklmnopqrstuvwxyz中的一個(gè)字符 
  3. function getOptions() 
  4.   $options = array(); 
  5.   $result = array(); 
  6.   for($i=48; $i<=57; $i++) 
  7.   { 
  8.       array_push($options,chr($i));   
  9.   } 
  10.   for($i=65; $i<=90; $i++) 
  11.    { 
  12.        $j = 32; 
  13.        $small = $i + $j
  14.        array_push($options,chr($small)); 
  15.  } 
  16.   return $options
  17. /* 
  18. $e = getOptions(); 
  19. for($j=0; $j<150; $j++) 
  20. { 
  21.  echo $e[$j]; 
  22. } 
  23. */ 
  24. $len = 10; 
  25. // 隨機(jī)生成數(shù)組索引,從而實(shí)現(xiàn)隨機(jī)數(shù) 
  26. for($j=0; $j<100; $j++) 
  27.   $result = ""
  28.   $options = getOptions(); 
  29.   $lastIndex = 35; 
  30.   while (strlen($result)<$len
  31.   { 
  32.     // 從0到35中隨機(jī)取一個(gè)作為索引 
  33.   $index = rand(0,$lastIndex); 
  34.   // 將隨機(jī)數(shù)賦給變量 $chr 
  35.     $chr = $options[$index]; 
  36.   // 隨機(jī)數(shù)作為 $result 的一部分 
  37.     $result .= $chr
  38.     $lastIndex = $lastIndex-1; 
  39.   // 最后一個(gè)索引將不會(huì)參與下一次隨機(jī)抽獎(jiǎng) 
  40.     $options[$index] = $options[$lastIndex]; 
  41.   } 
  42.   echo $result."n"
  43. ?>
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: a一级免费视频 | 欧美激情第1页 | 久久成人综合 | 日韩欧美大片网站 | 成人区精品一区二区婷婷 | 1000部精品久久久久久久久 | 在线免费国产视频 | 欧美在线激情 | 日韩欧美中文 | 成人久久久久 | 在线一区二区三区四区 | 欧美一区二区国产 | 懂色一区二区三区在线播放 | 韩国日本美国免费毛片 | 久久狠 | 91精品国产一区二区三区 | 亚洲精品乱码久久久久久黑人 | 亚洲天堂2017 | 国产成人99久久亚洲综合精品 | 好吊日精品视频 | 在线免费看黄 | 美女久久网站 | 日本乱偷中文字幕 | 999久久精品 | av网站免费看 | 国产亚洲视频在线 | 午夜激情免费 | 天天操夜夜爽 | 国产精品99久久久 | 欧美日韩中文字幕在线 | 中文字幕日韩欧美一区二区三区 | 日韩在线不卡 | 国产嫩草影院久久久久 | 国产精品精品久久久 | 国产午夜激情视频 | 欧美性爽| 九九久久国产 | 午夜黄色av| 国产二区久久 | 一级欧美 | 国产理论片 |