W3docs

Función PHP: array_rand

La función PHP array_rand es una herramienta útil para obtener elementos aleatorios de un array. Acepta un array y devuelve una o más claves.

La función array_rand() de PHP selecciona una o más claves al azar de un array. No devuelve los valores en sí — devuelve claves, que luego se usan para leer los elementos correspondientes. Esta pequeña distinción es la fuente de confusión más común con la función, por lo que vale la pena tenerla en cuenta a lo largo de esta página.

array_rand() es la herramienta adecuada cuando necesitas seleccionar un elemento aleatorio de una lista (una cita aleatoria, un banner aleatorio, una pregunta aleatoria) o tomar un subconjunto aleatorio de un array más grande sin modificar ni reordenar el original.

Sintaxis

array_rand(array $array, int $num = 1): int|string|array
ParámetroDescripción
$arrayEl array de entrada del que se selecciona. No debe estar vacío.
$numCuántas claves devolver. Opcional, por defecto es 1. Debe estar entre 1 y la longitud del array.

El tipo de retorno depende de $num:

  • Cuando $num es 1 (u omitido), devuelve una clave única — un int para un array numérico o un string para una clave de cadena.
  • Cuando $num es 2 o más, devuelve un array de claves.

Seleccionar un solo elemento

El uso más común es obtener un valor aleatorio. Llama a array_rand() para obtener una clave y luego usa esa clave para acceder al array:

php— editable, runs on the server

array_rand($colors) devuelve una clave aleatoria única (un índice entero en este caso), que se usa para leer el color correspondiente. Los dos pasos se combinan a menudo en una sola línea: $colors[array_rand($colors)].

Seleccionar varios elementos

Pasa un segundo argumento para obtener varias claves. El resultado es un array de claves, y las claves se devuelven en el mismo orden en que aparecen en el array original — solo cuáles claves se eligen es aleatorio, no su orden:

<?php

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

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

?>

Como array_rand() devuelve claves y no valores, la forma habitual de mapearlas de vuelta a valores es array_map:

<?php

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

print_r($picked);

?>

Valor de retorno y claves de cadena

Un malentendido frecuente es que array_rand() siempre devuelve enteros. No es así — devuelve cualquier clave que haya seleccionado, preservando su tipo original. Para un array asociativo, eso significa claves de cadena:

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

?>

Problemas comunes

  • Devuelve claves, no valores. array_rand($arr) te da una clave; aún necesitas $arr[$key] para obtener el valor.
  • Array vacío. Llamar a array_rand() con un array vacío lanza un ValueError (PHP 8+) o emite una advertencia y devuelve null en versiones anteriores. Comprueba el array primero.
  • $num fuera de rango. Pedir más elementos de los que contiene el array genera un ValueError.
  • No es criptográficamente seguro. array_rand() está bien para rotar banners o muestrear datos, pero nunca lo uses para seleccionar tokens de sesión, contraseñas o cualquier cosa sensible para la seguridad. Usa random_int() con un CSPRNG para eso.

Funciones relacionadas

  • shuffle() — reordena aleatoriamente todos los elementos de un array en su lugar.
  • str_shuffle() — mezcla aleatoriamente los caracteres de una cadena.
  • rand() y mt_rand() — generan un entero aleatorio en un rango.
  • array_slice() — extrae una porción contigua de un array.

Conclusión

array_rand() es una forma compacta de seleccionar claves aleatorias de un array — una cuando se omite $num, un array de ellas cuando se pasa un número. Recuerda que devuelve claves (preservando su tipo original, entero o cadena), que las claves elegidas mantienen el orden original del array, y que no es adecuada para aleatoriedad sensible a la seguridad.

Práctica

Práctica
¿Cuál es el propósito de la función array_rand() en PHP?
¿Cuál es el propósito de la función array_rand() en PHP?
Was this page helpful?