Escoger un elemento aleatorio de un array en PHP

Si alguna vez necesitas escoger un elemento aleatorio de un array puede usar array_rand():

$array = [
    'Gorka',
    'Javier',
    'Juan',
];

$indiceAletario = array_rand($array);

echo "Índice escogido: {$indiceAletario}" . PHP_EOL;
echo "Elemento escogido: {$array[$indiceAletario]}" . PHP_EOL;

Un posible resultado es:

Índice escogido: 2
Elemento escogido: Juan

Esta función te devuelve un índice (o más) del array de manera aleatoria y funciona con índices numéricos o con arrays asociativos:

$array = [
    'uno' => 'Gorka',
    'dos' => 'Jon',
    'tres' => 'Juan'
];

print_r(array_rand($array)) . PHP_EOL;

Un posible resultado sería:

Índice escogido: dos
Elemento escogido: Jon

¿Y si quiero varios elementos aleatorios?

Pues puedes seguir usando esta función pasándole un segundo parámetro:

$array = [
    'uno' => 'Gorka',
    'dos' => 'Jon',
    'tres' => 'Juan'
];

$indicesAletarios = array_rand($array, 2);
print_r($indicesAletarios);

Esto devolverá algo así:

Array
(
    [0] => uno
    [1] => tres
)

¿Es segura esta función?

Esta función era bastante lenta en su día y no era muy aleatoria. Sin embargo, desde la función 7.1 se cambió su funcionamiento interno para empezar a usar el algoritmo Mersenne Twister. ¿Que si puedo explicar cómo funciona ese algoritmo? Pues no, mejor pregunta a alguien que lo sepa.

Así que si eres un «hater» de PHP lo siento mucho pero te has quedado sin otra razón para odiarlo.

Si tienes alguna duda sobre su aleatoriedad, o usas una versión vieja de PHP tienes la opción de sustituirla por mt_rand():

$array = [
	'Gorka',
	'Javier',
	'Juan',
];

$indiceAletario = mt_rand(0, sizeof($array)-1);
print_r($array[$indiceAletario]);

Deja un comentario