PHP-Funktion: array_rand
Die PHP-Funktion array_rand ermöglicht das zufällige Abrufen von Elementen aus einem array. Sie nimmt ein array entgegen und gibt einen oder mehrere Schlüssel zurück.
Die PHP-Funktion array_rand() wählt einen oder mehrere Schlüssel zufällig aus einem array aus. Sie gibt nicht die Werte selbst zurück — sie gibt Schlüssel zurück, mit denen man dann die entsprechenden Elemente liest. Dieser kleine Unterschied ist die häufigste Quelle der Verwirrung bei dieser Funktion und sollte daher auf dieser Seite stets im Hinterkopf behalten werden.
array_rand() ist das richtige Werkzeug, wenn man ein zufälliges Element aus einer Liste auswählen möchte (ein zufälliges Zitat, ein zufälliges Banner, eine zufällige Frage) oder eine zufällige Teilmenge eines größeren arrays benötigt, ohne das Original zu verändern oder neu anzuordnen.
Syntax
array_rand(array $array, int $num = 1): int|string|array| Parameter | Beschreibung |
|---|---|
$array | Das Eingabe-array, aus dem gewählt wird. Darf nicht leer sein. |
$num | Wie viele Schlüssel zurückgegeben werden sollen. Optional, Standard ist 1. Muss zwischen 1 und der Länge des arrays liegen. |
Der Rückgabetyp hängt von $num ab:
- Wenn
$numgleich1ist (oder weggelassen wird), wird ein einzelner Schlüssel zurückgegeben — einintbei einem numerischen array oder einstringbei einem string-Schlüssel. - Wenn
$numgleich2oder mehr ist, wird ein array von Schlüsseln zurückgegeben.
Ein einzelnes Element auswählen
Die häufigste Verwendung ist das Abrufen eines zufälligen Werts. Man ruft array_rand() auf, um einen Schlüssel zu erhalten, und verwendet diesen Schlüssel dann als Index im array:
array_rand($colors) gibt einen einzelnen zufälligen Schlüssel zurück (hier einen ganzzahligen Index), mit dem die entsprechende Farbe gelesen wird. Die zwei Schritte werden häufig in einer Zeile kombiniert: $colors[array_rand($colors)].
Mehrere Elemente auswählen
Gibt man ein zweites Argument an, werden mehrere Schlüssel zurückgegeben. Das Ergebnis ist ein array von Schlüsseln, und die Schlüssel werden in derselben Reihenfolge zurückgegeben, in der sie im ursprünglichen array erscheinen — nur welche Schlüssel gewählt werden, ist zufällig, nicht ihre Reihenfolge:
<?php
$colors = ["red", "green", "blue", "yellow", "orange"];
$keys = array_rand($colors, 2); // e.g. [1, 4]
foreach ($keys as $key) {
echo $colors[$key] . "\n";
}
?>Da array_rand() Schlüssel und keine Werte zurückgibt, ist der übliche Weg, sie auf Werte abzubilden, array_map:
<?php
$colors = ["red", "green", "blue", "yellow", "orange"];
$picked = array_map(fn($k) => $colors[$k], (array) array_rand($colors, 2));
print_r($picked);
?>Rückgabewert und string-Schlüssel
Ein häufiges Missverständnis ist, dass array_rand() immer ganze Zahlen zurückgibt. Das ist nicht der Fall — sie gibt den gewählten Schlüssel mit seinem ursprünglichen Typ zurück. Bei einem assoziativen array bedeutet das string-Schlüssel:
<?php
$fruit = ["a" => "apple", "b" => "banana", "c" => "cherry"];
$key = array_rand($fruit);
echo $key; // e.g. "b" (a string key)
echo "\n";
echo $fruit[$key]; // e.g. "banana"
?>Häufige Fallstricke
- Es werden Schlüssel zurückgegeben, keine Werte.
array_rand($arr)liefert einen Schlüssel; man benötigt weiterhin$arr[$key], um den Wert zu erhalten. - Leeres array. Der Aufruf von
array_rand()auf einem leeren array wirft einenValueError(PHP 8+) oder gibt eine Warnung aus und gibtnullbei älteren Versionen zurück. Das array sollte vorher geprüft werden. $numaußerhalb des gültigen Bereichs. Werden mehr Elemente angefordert, als das array enthält, wird einValueErrorausgelöst.- Nicht kryptografisch sicher.
array_rand()eignet sich zum Mischen von Bannern oder zur Datenstichprobe, aber niemals zum Auswählen von Session-Tokens, Passwörtern oder anderen sicherheitskritischen Dingen. Hierfür sollterandom_int()mit einem CSPRNG verwendet werden.
Verwandte Funktionen
shuffle()— alle Elemente eines arrays an Ort und Stelle zufällig neu anordnen.str_shuffle()— die Zeichen eines string zufällig mischen.rand()undmt_rand()— eine zufällige ganze Zahl in einem Bereich erzeugen.array_slice()— einen zusammenhängenden Abschnitt eines arrays extrahieren.
Fazit
array_rand() ist eine kompakte Möglichkeit, zufällige Schlüssel aus einem array auszuwählen — einen, wenn $num weggelassen wird, oder ein array davon, wenn eine Anzahl übergeben wird. Es ist wichtig zu bedenken, dass die Funktion Schlüssel zurückgibt (wobei deren ursprünglicher Typ, ganzzahlig oder string, erhalten bleibt), dass die gewählten Schlüssel die ursprüngliche Reihenfolge des arrays beibehalten, und dass sie für sicherheitskritische Zufallswerte nicht geeignet ist.