The PHP Online Conference 2021

array_rand

(PHP 4, PHP 5, PHP 7)

array_randSeleccionar una o más claves aleatorias de un array

Descripción

array_rand ( array $array [, int $num = 1 ] ) : mixed

Selecciona uno o más valores aleatorios de un array y devuelve la clave (o claves) de dichos valores aleatorios. Utiliza un generador de números seudoaleatorios que no es apto para fines criptográficos.

Parámetros

array

El array de entrada.

num

Especifica cuántas entradas deberían seleccionarse.

Valores devueltos

Al seleccionar solamente una entrada, array_rand() devolverá la clave para una entrada aleatoria. De lo contrario, devolverá un array con las claves de las entradas aleatorias. Esto se realiza de tal manera que se pueden seleccionar del array tanto claves como valores aleatorios. Intentar seleccionar más elementos de los que hay en el array resultará en un error de nivel E_WARNING, devolviendo NULL .

Historial de cambios

Versión Descripción
7.1.0 El algoritmo de aleatorización interno se ha cambiado para usar el generador de números aleatorios » Mersenne Twister en lugar de la función libc rand.
5.2.10 El array de claves resultante ya no se mezcla.
4.2.0El generador de números aleatorio es sembrado automáticamente.

Ejemplos

Ejemplo #1 Ejemplo de array_rand()

<?php
$entrada 
= array("Neo""Morpheus""Trinity""Cypher""Tank");
$claves_aleatorias array_rand($entrada2);
echo 
$entrada[$claves_aleatorias[0]] . "\n";
echo 
$entrada[$claves_aleatorias[1]] . "\n";
?>

Ver también

add a note add a note

User Contributed Notes 4 notes

up
52
Anonymous
11 years ago
If the array elements are unique, and are all integers or strings, here is a simple way to pick $n random *values* (not keys) from an array $array:

<?php array_rand(array_flip($array), $n); ?>
up
22
grzeniufication
2 years ago
<?php
// An example how to fetch multiple values from array_rand
$a = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g' ];
$n = 3;

// If you want to fetch multiple values you can try this:
print_r( array_intersect_key( $a, array_flip( array_rand( $a, $n ) ) ) );

// If you want to re-index keys wrap the call in 'array_values':
print_r( array_values( array_intersect_key( $a, array_flip( array_rand( $a, $n ) ) ) ) );
up
14
grzeniufication
2 years ago
<?php

/**
* Wraps array_rand call with additional checks
*
* TLDR; not so radom as you'd wish.
*
* NOTICE: the closer you get to the input arrays length, for the n parameter, the  output gets less random.
* e.g.: array_random($a, count($a)) == $a will yield true
* This, most certainly, has to do with the method used for making the array random (see other comments).
*
* @throws OutOfBoundsException – if n less than one or exceeds size of input array
*
* @param array $array – array to randomize
* @param int $n – how many elements to return
* @return array
*/
function array_random(array $array, int $n = 1): array
{
    if (
$n < 1 || $n > count($array)) {
        throw new
OutOfBoundsException();
    }

    return (
$n !== 1)
        ?
array_values(array_intersect_key($array, array_flip(array_rand($array, $n))))
        : array(
$array[array_rand($array)]);
}
up
12
Anonymous
8 years ago
It doesn't explicitly say it in the documentation, but PHP won't pick the same key twice in one call.
To Top