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ètre | Description |
|---|---|
$array | L'array d'entrée depuis lequel effectuer la sélection. Ne doit pas être vide. |
$num | Le 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
$numvaut1(ou est omis), la fonction retourne une clé unique — unintpour un array numérique ou unestringpour une clé de type string. - Lorsque
$numvaut2ou 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 :
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 uneValueError(PHP 8+) ou émet un avertissement et retournenullsur les versions plus anciennes. Vérifiez l'array au préalable. $numhors limites. Demander plus d'éléments que l'array n'en contient lève uneValueError.- 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é. Utilisezrandom_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()etmt_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é.