Heim > Backend-Entwicklung > PHP-Problem > So implementieren Sie sich nicht wiederholende Zufallszahlen in PHP

So implementieren Sie sich nicht wiederholende Zufallszahlen in PHP

藏色散人
Freigeben: 2023-03-07 08:40:02
Original
3850 Leute haben es durchsucht

So implementieren Sie sich nicht wiederholende Zufallszahlen in PHP: Initialisieren Sie zuerst die Variable auf 0, erstellen Sie dann ein neues Array, generieren Sie dann zufällig eine Zahl innerhalb eines bestimmten Bereichs und fügen Sie sie in das Array ein Array; weisen Sie dem Array schließlich neue Werte zu. Der Schlüsselname reicht aus.

So implementieren Sie sich nicht wiederholende Zufallszahlen in PHP

Empfehlung: „PHP-Video-Tutorial

PHP generiert eine sich nicht wiederholende Zufallsarray-Kapselungsmethode

/*
	 * 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;
	}
Nach dem Login kopieren

Diese Methode besteht darin, jedes Mal Zufallszahlen zu erhalten und sie im Array zu speichern, bevor sie dedupliziert werden. .. Ineffizient ... Ich möchte

PHP nicht verwenden, um m eindeutige Zufallszahlen im n-Bereich (m<=n) effizient zu generieren

Hinweis: Es wird auch im Buch erwähnt " „Programming Pearls“, der Titel lautet „Wie man m sich nicht wiederholende Zufallszahlen im Bereich von n (m<=n) effizient generiert“

Dieser Algorithmus übernimmt sehr geschickt die Position der Zufallszahl (< code style="padding: 2px 4px; margin: 0px 0px 8px; Schriftfamilie: Menlo, Monaco, Consolas, „Courier New“, Monospace; overflow-wrap: break-word; white-space: nowrap; Schriftgröße: 13px;"><span style="color:#ff6820; background-color:rgb(252,245,239)">数组的下标</span>Subscript of the array< /code>), anstatt die Zufallszahl selbst zu nehmen. Jedes Mal, wenn eine Zufallszahl genommen wird, wird sie aus dem Wertebereich ausgeschlossen. Beim nächsten Mal wird sie nur genommen Aus den verbleibenden Zahlen kann die Auswahl in einem Durchlauf vervollständigt werden.

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;
		}
	}
}
Nach dem Login kopieren
1. Der erste Schritt besteht darin, jeder Zahl im Array einen Wert in der Reihenfolge ihres Index zuzuweisen und ein Array von $num-Zahlen Schlüsselwerten zu erhalten, die in der entsprechenden Reihenfolge angeordnet sind .

2. Beginnen Sie im zweiten Schritt mit dem Abrufen der Zufallszahl $rand im Bereich [i, $num-1] und verwenden Sie die erhaltene Zufallszahl $rand als aktuelle Position im Array Schlüssel i entspricht dem Wert $rand des -Index. Ersetzen Sie den Wert des -Schlüssels $rand, der dem -Index entspricht, durch i Array-Schlüsselwert-Kreuzaustausch. Die Bedeutung besteht darin, die generierte Zufallszahl aus dem Wertebereich [ i,$num-1] auszuschließen und beim nächsten Mal in den verbleibenden Zahlen [ i+1,num- 1] zu liegen ] Wert.

3. Um wiederholte Werte zu vermeiden, führen Sie im dritten Schritt nur alternierende Operationen an den unveränderten Schlüssel-Wert-Paaren durch, d == Wert) .

4. Das Ende.

Ordnen Sie das Array der Reihe nach an

Teilaustauschprozess

Erhalten Sie wie oben gezeigt 10 Teilbeispiele von Zufallszahlen.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie sich nicht wiederholende Zufallszahlen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage