¿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
¿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
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
Tenga en cuenta que array_rand devuelve claves de matriz, no los elementos en sí. – Asciiom
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.
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.
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]).
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.
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";
+1: bienvenida y buena pregunta, no prestó atención a que ... –
-1 bienvenida a SO y que podamos introducir a php.net también! – Ejaz