有极速快乐十分吗|极速快乐十分走势图|

PHP CodeBase: 生成N個不重復的隨機數

隨機數的生成函數
服務器君一共花費了308.398 ms進行了7次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

有25幅作品拿去投票,一次投票需要選16幅,單個作品一次投票只能選擇一次。前面有個程序員捅了漏子,忘了把投票入庫,有200個用戶產生的投票序列為空。那么你會如何填補這個漏子?

當然向上級反映情況。但是我們這里討論的是技術,就是需要生成1-25之間的16個不重復的隨機數,去填補。具體怎么設計函數呢?將隨機數存入數組,再在數組中去除重復的值,即可生成一定數量的不重復隨機數

程序如下:

<?php
/*
* array unique_rand( int $min, int $max, int $num )
* 生成一定數量的不重復隨機數
* $min 和 $max: 指定隨機數的范圍
* $num: 指定生成數量
*/
function unique_rand($min, $max, $num) {
    $count = 0;
    $return = array();
    while ($count < $num) {
        $return[] = mt_rand($min, $max);
        $return = array_flip(array_flip($return));
        $count = count($return);
    }
    shuffle($return);
    return $return;
}

$arr = unique_rand(1, 25, 16);
sort($arr);

$result = '';
for($i=0; $i < count($arr);$i++)
{
	$result .= $arr[$i].',';
}
$result = substr($result, 0, -1);
echo $result;
?>

程序運行如下:

2,3,4,6,7,8,9,10,11,12,13,16,20,21,22,24

補充幾點說明:

  • 生成隨機數時用了?mt_rand()?函數。這個函數生成隨機數的平均速度要比?rand()?快四倍。
  • 去除數組中的重復值時用了“翻翻法”,就是用?array_flip()?把數組的 key 和 value 交換兩次。這種做法比用?array_unique()?快得多。
  • 返回數組前,先使用?shuffle()?為數組賦予新的鍵名,保證鍵名是 0-n 連續的數字。如果不進行此步驟,可能在刪除重復值時造成鍵名不連續,給遍歷帶來麻煩。

延伸閱讀

此文章所在專題列表如下:

  1. PHP CodeBase: 通過新浪微博API獲取數據
  2. PHP CodeBase: 過濾XSS攻擊的PHP函數
  3. PHP CodeBase: 將時間顯示為“剛剛”“n分鐘/小時前”等
  4. PHP CodeBase: 求最近一個周一和上周一的日期
  5. PHP CodeBase: 獲取遠程圖片的體積大小
  6. PHP CodeBase: 生成N個不重復的隨機數
  7. PHP CodeBase: 判斷用戶是否手機訪問

本文地址:http://www.bavugt.tw/librarys/veda/detail/2508,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.bavugt.tw/librarys/veda/detail/2508

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏

大家都在看

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《程序員修煉之道:從小工到專家》 亨特(Andrew Hunt) (作者), 托馬斯(David Thomas) (作者), 馬維達 (譯者)

《程序員修煉之道:從小工到專家》內容簡介:《程序員修煉之道》由一系列獨立的部分組成,涵蓋的主題從個人責任、職業發展,知道用于使代碼保持靈活、并且易于改編和復用的各種架構技術,利用許多富有娛樂性的奇聞軼事、有思想性的例子及有趣的類比,全面闡釋了軟件開發的許多不同方面的最佳實踐和重大陷阱。無論你是初學者,是有經驗的程序員,還是軟件項目經理,《程序員修煉之道:從小工到專家》都適合你閱讀。

更多計算機寶庫...

有极速快乐十分吗
秒速彩票开奖直播 山东十一选五开奖号 新疆25选7历史开奖号码 熊猫麻将微信群 到百度首页 吉利汽车股票代码 uedbet官网体 足球比赛数据分析 快乐正规时时彩官网 快乐飞艇开奖官网