Ich habe ein Array namens $ran = array(1,2,3,4);
Ich muss einen zufälligen Wert aus diesem Array herausholen und in einer Variablen speichern. Wie kann ich das tun?
Sie können auch nur Folgendes tun:
$k = array_rand($array);
$v = $array[$k];
Dies ist der Weg, wenn Sie ein assoziatives Array haben.
array_rand
ist nicht so zufällig wie es sein solltearray_rand_value
array_rand()
Verwendet seit PHP 7.1 den Mersenne Twister-Generator: rand () aliased auf mt_rand () und srand () aliased auf mt_srand () . In der Praxis sollte es jetzt gut genug sein.PHP bietet dafür eine Funktion: array_rand ()
http://php.net/manual/en/function.array-rand.php
quelle
array_rand
Funktionsarguments ist,1
dass Sie ihn nicht schreiben müssen.Sie können mt_rand () verwenden
Dies ist auch als Funktion nützlich, wenn Sie den Wert benötigen
quelle
array_rand
ist es nicht so zufällig, wie es sein sollte, alsomt_rand
wird es bevorzugtisset
Teil? Dies würde für assoziative Arrays sowieso fehlschlagen.mt_rand
anstelle vonrand
in diesem Fall scheint einige Elemente mehr als die anderen zu bevorzugenquelle
Mit der Funktion array_rand können Sie einen zufälligen Schlüssel aus Ihrem Array auswählen (siehe unten).
Oder Sie können die Rand- und Count-Funktionen verwenden, um einen zufälligen Index auszuwählen.
quelle
Abgeleitet von Laravel
Collection::random()
:Verwendung:
Ein paar Anmerkungen:
$amount
muss kleiner oder gleich seincount($array)
.array_rand()
mischt keine Schlüssel (seit PHP 5.2.10, siehe 48224 ), sodass Ihre ausgewählten Artikel immer in der ursprünglichen Reihenfolge sind. Verwenden Sieshuffle()
danach , wenn nötig.Dokumentation :
array_rand()
,shuffle()
edit: Die Laravel-Funktion ist seitdem merklich gewachsen, siehe Laravel 5.4
Arr::random()
. Hier ist etwas Ausführlicheres, abgeleitet von der erwachsenen Laravel-Funktion:Einige Highlights:
array_random($array, 1)
gibt ein Array mit einem Element zurück ( # 19826 )quelle
Die
array_rand
Funktion scheint auf großen Arrays ungleichmäßig verteilt zu sein, nicht jedes Array-Element wird gleich wahrscheinlich ausgewählt. Das Verwenden von Shuffle für das Array und das anschließende Aufnehmen des ersten Elements hat kein Problem:quelle
mt_rand()
werden , sind wahrscheinlich besser für die Aufgabe geeignet.Ein weiterer Ansatz durch Umdrehen des Arrays, um einen direkten Wert zu erhalten.
Snippet
array_rand
Rückgabeschlüssel nicht Wert. Wir drehen also den Wert als Schlüssel um.Hinweis: Der PHP-Schlüssel ist immer ein eindeutiger Schlüssel. Wenn das Array umgedreht wird, wird der doppelte Wert als Schlüssel überschrieben.
quelle
$array[array_rand($array)];
?array_flip
Entfernen Sie das Duplikat als Schlüssel und geben Sie das Ergebnis an.oder speziell für Arrays:
quelle
In meinem Fall muss ich 2 Werte erhalten, was Objekte sind. Ich teile diese einfache Lösung.
quelle
Hat Ihre Auswahl Auswirkungen auf die Sicherheit? Wenn ja, verwenden Sie
random_int()
undarray_keys()
. (random_bytes()
ist nur PHP 7, aber es gibt eine Polyfüllung für PHP 5 ).Verwendung:
Demo: https://3v4l.org/1joB1
quelle
Verwenden Sie rand (), um eine Zufallszahl für das Echo des Zufallsschlüssels zu erhalten. In Beispiel: 0 - 3
quelle
Eine Linie:
$ran[rand(0, count($ran) - 1)]
quelle
Ich brauchte eine einzeilige Version für ein kurzes Array:
oder wenn das Array fest ist:
quelle
On-Liner:
quelle
Dies funktioniert gut mit Inline-Arrays. Außerdem denke ich, dass die Dinge aufgeräumter und wiederverwendbarer sind, wenn sie in eine Funktion eingepackt werden.
Verwendung:
Unter PHP <7.1.0 wird
array_rand()
verwendetrand()
, sodass Sie diese Funktion nicht für Sicherheits- oder Kryptografiezwecke verwenden möchten. Verwenden Sie diese Funktion unter PHP 7.1.0+ ohne Bedenken, darand()
ein Alias fürmt_rand()
.quelle
Ich stütze meine Antwort auf die Funktion von @ ÓlafurWaage. Ich habe versucht, es zu verwenden, aber es gab Referenzprobleme, als ich versucht hatte, das Rückgabeobjekt zu ändern. Ich habe seine Funktion aktualisiert, um sie als Referenz zu übergeben und zurückzugeben. Die neue Funktion ist:
Weitere Informationen finden Sie in meiner Frage unter Übergeben / Zurückgeben von Verweisen auf Objekt + Objektwechsel funktioniert nicht
quelle
Ein einfacher Weg, um den Zufallswert aus dem Array zu erhalten .
Jetzt erhalten Sie jedes Mal andere Farben von Array .
quelle
Sie erhalten eine Zufallszahl aus einem Array wie folgt:
quelle