2010-05-02 8 views
8

¿Cuál es exactamente la diferencia entre las funciones shuffle y array_rand en PHP? Lo cual es más rápido si no hay diferencia.Diferencia de PHP entre shuffle y array_rand

Gracias

+4

+1: bienvenida y buena pregunta, no prestó atención a que ... –

+0

-1 bienvenida a SO y que podamos introducir a php.net también! – Ejaz

Respuesta

8

Cuando llama en una matriz, shuffle cambia aleatoriamente el orden de todos los elementos de dicha matriz.

Por ejemplo, la porción siguiente de código:

$arr = array(1, 2, 3, 4, 5); 
shuffle($arr); 
var_dump($arr); 

podría dar esta salida:

array 
    0 => int 3 
    1 => int 1 
    2 => int 5 
    3 => int 4 
    4 => int 2 

toda la matriz en sí es modificado.


Cuando llama en una matriz, array_rand devuelve uno o más elementos de dicha matriz, seleccionados al azar.

Por ejemplo, la porción siguiente de código:

$arr = array(1, 2, 3, 4, 5); 
$randomly_selected = array_rand($arr, 3); 
var_dump($randomly_selected); 

podría dar tis tipo de salida:

array 
    0 => int 0 
    1 => int 2 
    2 => int 3 

Se devuelve una sub-matriz de la matriz inicial - y la matriz inicial no es modificado

+3

Tenga en cuenta que array_rand devuelve claves de matriz, no los elementos en sí. – Asciiom

1

shuffle afecta a las teclas de matriz y utiliza su parámetro por referencia. shuffle solía ser débil en términos de aleatorización en las versiones anteriores de PHP, pero eso ya no es cierto.

array_rand deja la matriz original intacta y tiene un parámetro opcional que le permite seleccionar la cantidad de elementos que desea devolver.

4

shuffle reordena una matriz en orden aleatorio. esta función toma una matriz por referencia, porque está mutando la estructura interna de la matriz, no solo accediendo a ella, mientras que array_rand simplemente devuelve un índice aleatorio en una matriz.

1

shuffle cambia el orden de los elementos de una matriz. Es una función de clasificación.

array_rand devuelve n (argumentos [1], por defecto es 1) elementos aleatorios de la matriz. Devuelve una clave (para los argumentos [1] == 1) o una matriz de teclas (para los argumentos [1]> 1) que hacen referencia a los elementos de la matriz (argumentos [0]).

1

Shuffle() toma toda la matriz y asigna al azar la posición de los elementos en ella. [Nota: en versiones anteriores de PHP, el algoritmo shuffle() era bastante pobre]

array_rand() toma una matriz y devuelve una o más entradas seleccionadas al azar. La ventaja de array_rand() es que deja la matriz original intacta.

2

Al cambiar $ no parámetro He intentado seguir el fragmento de código para probar el funcionamiento de ambas funciones.Incluso en grandes arreglos no hay mucha diferencia. La mayor parte del tiempo entre 1x10 -5 segundos y 5x10 -5

$time_start = microtime(true); 
$rand_keys = array_rand($myArray, $no); 
echo (microtime(true)-$time_start)."\n"; 

$time_start = microtime(true); 
shuffle($myArray); 
echo (microtime(true)-$time_start)."\n"; 
Cuestiones relacionadas