W3docs

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
ParameterBeschreibung
$arrayDas Eingabe-array, aus dem gewählt wird. Darf nicht leer sein.
$numWie 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 $num gleich 1 ist (oder weggelassen wird), wird ein einzelner Schlüssel zurückgegeben — ein int bei einem numerischen array oder ein string bei einem string-Schlüssel.
  • Wenn $num gleich 2 oder 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:

php— editable, runs on the server

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 einen ValueError (PHP 8+) oder gibt eine Warnung aus und gibt null bei älteren Versionen zurück. Das array sollte vorher geprüft werden.
  • $num außerhalb des gültigen Bereichs. Werden mehr Elemente angefordert, als das array enthält, wird ein ValueError ausgelö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 sollte random_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() und mt_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.

Übungen

Übung
Was ist der Zweck der Funktion array_rand() in PHP?
Was ist der Zweck der Funktion array_rand() in PHP?
Was this page helpful?