bekomme einen zufälligen Wert von einem PHP-Array, aber mach es einzigartig

7

Ich möchte einen zufälligen Wert aus einem Array auswählen, aber so lange wie möglich einzigartig halten.

Wenn ich zum Beispiel einen Wert 4 Mal aus einem Array von 4 Elementen auswähle, sollte der ausgewählte Wert zufällig sein, aber jedes Mal anders.

Wenn ich es 10 mal aus dem gleichen Array von 4 Elementen auswähle, dann werden offensichtlich einige Werte dupliziert.

Ich habe das jetzt, aber ich bekomme immer noch doppelte Werte, auch wenn die Schleife viermal läuft:

%Vor%     
Alex 24.06.2011, 17:25
quelle

8 Antworten

8

Sie haben es fast richtig. Das Problem war die unset($arr_history[$selected]); -Zeile. Der Wert von $selected ist kein Schlüssel, sondern ein Wert, so dass die Unset-Funktion nicht funktioniert.

Um es gleich zu halten, was Sie dort oben haben:

%Vor%

Oder ein Beispiel mit ein paar weniger Zeilen:

%Vor%     
Francois Deschenes 24.06.2011, 17:33
quelle
7

Wie wäre es mit dem Mischen des Arrays und dem Entfernen von Objekten?

Wenn pop null zurückgibt, setzen Sie das Array zurück.

%Vor%

Natürlich solltest du das besser einkapseln und besser prüfen und andere Dinge tun.

    
zzzzBov 24.06.2011 17:29
quelle
3

Php hat eine native Funktion namens shuffle , mit der Sie die Elemente im Array nach dem Zufallsprinzip sortieren können. Also was ist das?

%Vor%     
KingOfCode 24.06.2011 17:34
quelle
2

Taste! = Wert, benutze dies:

%Vor%     
Karoly Horvath 24.06.2011 17:30
quelle
2

Ссылка

%Vor%     
Steve Robbins 24.06.2011 17:42
quelle
1

Ich habe dies getan, um ein zufälliges achtstelliges Passwort für Benutzer zu erstellen:

%Vor%     
sadmicrowave 24.06.2011 17:30
quelle
1

Wenn Sie nicht wissen, welche Werte in dem Array enthalten sind, können Sie versuchen, einen linearen kongruenten Generator zu implementieren, um alle Werte im Array zu generieren.

LCG-Implementierung

Wikipedia listet einige Werte auf, die Sie verwenden können, und die Regeln für die Auswahl der Werte für den LCG-Algorithmus, da der LCG-Algorithmus deterministisch ist und garantiert keinen einzelnen Wert vor der Länge des Zeitraums wiederholt.

Nachdem Sie das Array mit diesen eindeutigen Zahlen gefüllt haben, können Sie einfach die Zahlen im Array 1 nach 1 in der Reihenfolge erhalten.

    
Oscar Gomez 24.06.2011 17:35
quelle
-1

Einfach und sauber:

%Vor%     
Gabriel Vieira 25.07.2014 19:03
quelle

Tags und Links