2010-05-02 7 views
8

Quelle est exactement la différence entre les fonctions shuffle et array_rand en PHP? Ce qui est plus rapide s'il n'y a pas de différence.PHP différence entre shuffle et array_rand

Merci

+4

+1: bienvenue et bonne question, jamais prêté attention à ce que ... –

+0

-1 bienvenue à SO et peut nous présenter vous aussi sur php.net! – Ejaz

Répondre

8

Lorsqu'elle est appelée un tableau, shuffle randomise l'ordre de tous les éléments de ce tableau.

Par exemple, la partie de code suivante:

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

pourrait donner cette sortie:

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

tout le tableau lui-même se modifie.


Quand appelé sur un réseau, array_rand rendements d'un ou plusieurs éléments de ce tableau, choisis au hasard.

Par exemple, la partie de code suivante:

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

pourrait donner tis type de sortie:

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

Un sous-ensemble du tableau initial est retourné - et le tableau initial n'est pas modifié.

+3

Notez que array_rand renvoie les clés de tableau, pas les éléments eux-mêmes. – Asciiom

1

shuffle affecte les clés du tableau et utilise son paramètre par référence. shuffle utilisé pour être faible en termes de randomisation dans les anciennes versions de PHP, mais ce n'est plus vrai.

array_rand laisse le tableau d'origine intact et possède un paramètre optionnel pour vous permettre de sélectionner le nombre d'éléments que vous souhaitez retourner.

4

shuffle réorganise un tableau dans un ordre aléatoire. cette fonction prend un tableau par référence, car il est en train de muter la structure interne de la matrice, non seulement en y accédant, tandis que array_rand renvoie simplement un index aléatoire dans un tableau.

1

shuffle modifie l'ordre des éléments d'un tableau. C'est une fonction de tri.

array_rand renvoie n (arguments [1], par défaut 1) éléments aléatoires du tableau. Il renvoie une clé (pour les arguments [1] == 1) ou un tableau de clés (pour les arguments [1]> 1) qui référencent les éléments du tableau (arguments [0]).

1

Shuffle() prend l'ensemble du tableau et randomise la position des éléments dans celui-ci. [Note: Dans les versions antérieures de PHP, l'algorithme shuffle() était assez pauvre]

array_rand() prend un tableau et renvoie une ou plusieurs entrées sélectionnées au hasard. L'avantage de array_rand() est qu'il laisse le tableau original intact.

2

En changeant $ non paramètre J'ai essayé l'extrait de code suivant pour tester les performances des deux fonctions.Même dans les grands réseaux, il n'y a pas beaucoup de différence. La plupart du temps entre le 1x10 -5 secondes et 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";