目錄
PHP產生一個不重複隨機陣列的封裝方法
PHP高效產生m個n範圍內的不重複隨機數(m<=n)" >PHP高效產生m個n範圍內的不重複隨機數(m<=n)
首頁 後端開發 PHP問題 php如何實現不重複的隨機數

php如何實現不重複的隨機數

Nov 04, 2020 am 11:19 AM
php

php實作不重複隨機數的方法:先初始化變數為0;然後建立一個新數組;接著在一定範圍內隨機產生一個數字放入數組中,並去除數組中的重複值;最後為數組賦予新的鍵名即可。

php如何實現不重複的隨機數

推薦:《PHP影片教學

PHP產生一個不重複隨機陣列的封裝方法

/*
	 * array unique_rand( int $min, int $max, int $num )
	 * 生成一定数量的不重复随机数
	 * $min 和 $max: 指定随机数的范围
	 * $num: 指定生成数量
	 */
	function unique_rand($min, $max, $num) {
		//初始化变量为0
		$count = 0;
		//建一个新数组
		$return = array();
		while ($count < $num) {
			//在一定范围内随机生成一个数放入数组中
			$return[] = mt_rand($min, $max);
			//去除数组中的重复值用了“翻翻法”,就是用array_flip()把数组的key和value交换两次。这种做法比用 array_unique() 快得多。
			$return = array_flip(array_flip($return));
			//将数组的数量存入变量count中
			$count = count($return);
		}
		//为数组赋予新的键名
		shuffle($return);
		return $return;
	}
登入後複製

該方法以每次獲取隨機數存入數組再去重...效率低...不想用

PHP高效產生m個n範圍內的不重複隨機數(m<=n)

註:在  《 Programming Pearls 》一書中也有提到,題目為  “如何有效率地產生m個n範圍內的不重複隨機數(m<=n)”   

此演算法非常巧妙的取隨機數的位置(<span style="color:#ff6820; background-color:rgb(252,245,239)">#陣列的下標</span>),取代取隨機數本身,每次取到一個隨機數之後,就將其在取值範圍中排除,下一次只會在剩下的數字中取,一次遍歷就可以完成隨機數的選取,效率相當高。

function rand_num($num=&#39;200&#39;){
	for($i=0;$i<$num;$i++){
		$n[$i] = $i;
	}
	
	for($i=0;$i<$num;$i++){
		$rand = mt_rand($i,$num-1);
		//数组  随机数交换下标
	
		if($n[$i] == $i){
			$n[$i] = $n[$rand];
			$n[$rand] = $i;
		}
	}
}
登入後複製

1.第一步,為數組的每個數字按其下標順序賦值,得到一個$num 個數字鍵值對應順序排列的陣列。

2.第二步驟,開始取範圍[ i,$num-1 ]範圍內的隨機數$rand,並將取得到的隨機數$rand作為數組中目前位置 鍵i對應下標的值$rand,將數組中 鍵$rand對應下標的值替換為i,這其實就是陣列鍵值交叉互換。意義是,將已經產生的隨機數在取值範圍[ i,$num-1 ]中排除,會在剩下的數字中[ i 1,num-1 ]取值。

3.第三步驟,為避免重複取值,只在未改變的鍵值對中進行交替運算,即在原數組順序排列 (鍵==值) 的位置進行交替運算。

4.結束。

依序排列陣列#部分交換程序

 

如上圖,取得10個隨機數部分試例。

以上是php如何實現不重複的隨機數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

See all articles