2010-10-15 12 views
12

Tengo una matriz de 30 valores y necesito extraer de esta matriz 3 valores aleatorios diferentes. ¿Cómo puedo hacerlo?Elija 3 valores aleatorios diferentes de una matriz

+0

posible duplicado de [Obtener un subconjunto de valores aleatorios a partir de un php de matriz] (http://stackoverflow.com/questions/3504401/get-a-subset-of -random-values-from-an-array-php) – kennytm

Respuesta

17

robado Desvergonzadamente del manual de 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

Tenga en cuenta que, a partir de PHP 5.2.10, es posible que desee shuffle (aleatoria) de la las claves que se devuelven a través de shuffle($rand_keys); de lo contrario, siempre estarán en orden (el índice más pequeño primero). Es decir, en el ejemplo anterior, podrías obtener "Neo, Trinity" pero nunca "Trinity, Neo".

Si el orden de los elementos aleatorios no es importante, entonces el código anterior es suficiente.

3

uso shuffle($array) continuación array_rand($array,3)

+0

¿Alguna razón particular por la que llamas 'shuffle'? –

+2

solo para asegurarse de que es completamente aleatorio :) ... la historia detrás de esto es el hecho de que el año pasado usando array_randi estaba viendo resultados no tan aleatorios (elementos similares en ejecuciones consecutivas), por lo que es un poco más aleatorio Mezclaba primero la matriz y luego la alimentaba a la función array_rand y parecía dar más valores aleatorios. –

+0

Aún necesita obtener de las claves a los valores .... –

4

No estoy seguro de por qué molestarse en usar array_rand() en absoluto, ya que es simplemente una llamada de función adicional para aparentemente sin motivo. Simplemente shuffle() y cortar los primeros tres elementos:

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

Mucho más limpio, esta debería ser una respuesta aceptada –

Cuestiones relacionadas