2010-10-15 6 views
12

J'ai un tableau de 30 valeurs et j'ai besoin d'extraire de ce tableau 3 valeurs aléatoires différentes. Comment puis-je le faire?Choisissez 3 valeurs aléatoires différentes d'un tableau

+0

double possible de [Obtenir un sous-ensemble de valeurs aléatoires à partir d'un tableau php] (http://stackoverflow.com/questions/3504401/get-a-subset-of -random-values-from-an-array-php) – kennytm

Répondre

17

Shamelessly volée du manuel PHP:

<?php 
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank"); 
$rand_keys = array_rand($input, 2); 
echo $input[$rand_keys[0]] . "\n"; 
echo $input[$rand_keys[1]] . "\n"; 
?> 

http://us2.php.net/array_rand

Notez que, à partir de PHP 5.2.10, vous voudrez peut-être aléatoire (randomisation) le les clés retournées via shuffle($rand_keys), sinon elles seront toujours en ordre (le plus petit index en premier). Autrement dit, dans l'exemple ci-dessus, vous pourriez obtenir "Neo, Trinity" mais jamais "Trinity, Neo".

Si l'ordre des éléments aléatoires n'est pas important, alors le code ci-dessus est suffisant.

3

utilisation shuffle($array) puis array_rand($array,3)

+0

Une raison particulière pour laquelle vous appelez 'shuffle'? –

+2

juste pour s'assurer qu'il est vraiment aléatoire :) .. l'histoire derrière c'est le fait que l'année dernière en utilisant array_rand je voyais des résultats pas si aléatoires (articles similaires sur des séries consécutives), donc pour le rendre un peu plus aléatoire Je voudrais d'abord mélanger le tableau, puis le nourrir à la fonction array_rand et il semblait donner plus de valeurs aléatoires. –

+0

Vous avez encore besoin de passer des clés aux valeurs ... –

4

Je ne sais pas pourquoi s'embêter avec array_rand() du tout car c'est juste un appel de fonction supplémentaire pour apparemment pas de raison. Il suffit shuffle() et trancher les trois premiers éléments:

shuffle($array); 
print_r(array_slice($array, 0, 3)); 
+0

Beaucoup plus propre, cela devrait être une réponse acceptée –

Questions connexes