W3docs

Fonction PHP : array_rand

La fonction PHP array_rand permet de récupérer des éléments aléatoires depuis un array. Elle accepte un array en argument et retourne une ou plusieurs clés.

La fonction PHP array_rand() sélectionne une ou plusieurs clés au hasard dans un array. Elle ne retourne pas les valeurs elles-mêmes — elle retourne des clés, que vous utilisez ensuite pour lire les éléments correspondants. Cette petite distinction est la source de confusion la plus fréquente avec cette fonction, et il vaut donc la peine de la garder à l'esprit tout au long de cette page.

array_rand() est l'outil adapté lorsque vous devez choisir un élément aléatoire dans une liste (une citation aléatoire, une bannière aléatoire, une question aléatoire) ou extraire un sous-ensemble aléatoire d'un array plus grand sans modifier ni réordonner l'original.

Syntaxe

array_rand(array $array, int $num = 1): int|string|array
ParamètreDescription
$arrayL'array d'entrée depuis lequel effectuer la sélection. Ne doit pas être vide.
$numLe nombre de clés à retourner. Optionnel, vaut 1 par défaut. Doit être compris entre 1 et la longueur de l'array.

Le type de retour dépend de $num :

  • Lorsque $num vaut 1 (ou est omis), la fonction retourne une clé unique — un int pour un array numérique ou une string pour une clé de type string.
  • Lorsque $num vaut 2 ou plus, elle retourne un array de clés.

Sélectionner un seul élément

L'utilisation la plus courante consiste à récupérer une valeur aléatoire. Appelez array_rand() pour obtenir une clé, puis utilisez cette clé pour indexer à nouveau l'array :

php— editable, runs on the server

array_rand($colors) retourne une seule clé aléatoire (un index entier ici), qui est utilisée pour lire la couleur correspondante. Les deux étapes sont souvent combinées sur une seule ligne : $colors[array_rand($colors)].

Sélectionner plusieurs éléments

Passez un second argument pour récupérer plusieurs clés. Le résultat est un array de clés, et les clés sont retournées dans le même ordre qu'elles apparaissent dans l'array d'origine — seul lesquelles sont choisies est aléatoire, pas leur ordre :

<?php

$colors = ["red", "green", "blue", "yellow", "orange"];
$keys = array_rand($colors, 2); // e.g. [1, 4]

foreach ($keys as $key) {
    echo $colors[$key] . "\n";
}

?>

Comme array_rand() retourne des clés et non des valeurs, la façon habituelle de les convertir en valeurs est array_map :

<?php

$colors = ["red", "green", "blue", "yellow", "orange"];
$picked = array_map(fn($k) => $colors[$k], (array) array_rand($colors, 2));

print_r($picked);

?>

Valeur de retour et clés de type string

Une idée reçue fréquente est que array_rand() retourne toujours des entiers. Ce n'est pas le cas — elle retourne la clé qu'elle a choisie en préservant son type d'origine. Pour un array associatif, cela signifie des clés de type string :

<?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"

?>

Pièges courants

  • Elle retourne des clés, pas des valeurs. array_rand($arr) vous donne une clé ; vous avez encore besoin de $arr[$key] pour obtenir la valeur.
  • Array vide. Appeler array_rand() sur un array vide lève une ValueError (PHP 8+) ou émet un avertissement et retourne null sur les versions plus anciennes. Vérifiez l'array au préalable.
  • $num hors limites. Demander plus d'éléments que l'array n'en contient lève une ValueError.
  • Pas cryptographiquement sûre. array_rand() convient pour mélanger des bannières ou échantillonner des données, mais ne l'utilisez jamais pour choisir des jetons de session, des mots de passe ou quoi que ce soit de sensible en termes de sécurité. Utilisez random_int() avec un CSPRNG à cet effet.

Fonctions associées

  • shuffle() — réordonne aléatoirement tous les éléments d'un array en place.
  • str_shuffle() — mélange aléatoirement les caractères d'une string.
  • rand() et mt_rand() — génèrent un entier aléatoire dans une plage donnée.
  • array_slice() — extrait une portion contiguë d'un array.

Conclusion

array_rand() est un moyen compact de sélectionner des clés aléatoires dans un array — une seule lorsque vous omettez $num, un array lorsque vous passez un nombre. N'oubliez pas qu'elle retourne des clés (en préservant leur type d'origine, entier ou string), que les clés choisies conservent l'ordre d'origine de l'array, et qu'elle n'est pas adaptée à un usage nécessitant un aléatoire sécurisé.

Pratique

Pratique
Quel est le rôle de la fonction array_rand() en PHP ?
Quel est le rôle de la fonction array_rand() en PHP ?
Was this page helpful?