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% 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% Php hat eine native Funktion namens shuffle
, mit der Sie die Elemente im Array nach dem Zufallsprinzip sortieren können. Also was ist das?
Ich habe dies getan, um ein zufälliges achtstelliges Passwort für Benutzer zu erstellen:
%Vor%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.
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.