Elementos aleatorios de un array.

Resumen.

En este artículo vamos a ver como podemos extraer un determinado número de elementos (values) aleatorios de un array. Esta acción es sencilla si solo queremos extraer un elemento, pero si queremos extraer mas de un elemento tenemos que recurrir a un bucle. Aquí veremos como combinar estas dos posibilidades.

Artículo.

Para extraer un elemento aleatorio de un array disponemos de la función nativa array_rand() que recibe dos parámetros, el nombre del array y el número de elementos que deseamos aleatorios (mejor dicho, seudoaleatorios) que deseamos extraer. Esta función devuelve keys aleatorios del array y los devuelve en un array con keys 0, 1, 2, …
$key_aleatorias = array_rand($mi_array, 3) $aleatorios[$key_aleatorias[0]] $aleatorios[$key_aleatorias[1]] $aleatorios[$key_aleatorias[2]]
En el caso de solo desear un valor aleatorio, devuelve una cadena o string, si se desea mas de un valor, devolverá un array.

Para simplificar el segundo caso, podemos recurrir a un bucle, en este caso foreach, para no tener que acceder a cada elemento introduciendo manualmente la key correspondiente.

Así creamos un condicional que discrimine entre la obtención de un elemento (value) o mas de uno, en el caso segundo, como tenemos un array, lo convertimos en cadena o string mediante la función implode(). Tras el condicional, en el return de la función introducimos la variable $valor_aleatorio que será la misma, pero tomará valores diferentes en función del número de aleatorios solicitados (uno o mas de uno).

Así nuestra función tomará la siguiente forma:
<?php // Extrae un determinado numero de elementos aleatorios de un array. function Aleator_Array($array_orig,$n_aleator){     if($n_aleator == 1){         $valor_aleatorio $array_orig[array_rand($array_orig$n_aleator)];     }else{         $claves_aleatorias array_rand($array_orig$n_aleator);    // Keys aleatorias del array         foreach($claves_aleatorias as $key => $valorkey){              // echo "$key ==> $valorkey | $array_orig[$valorkey] <br />"; // Imprimimos bucle             $array_aleatorio[$key] = $array_orig[$valorkey];        // Creamos el nuevo array         }         $valor_aleatorio implode(', '$array_aleatorio);    // Creamos cadena a partir del array     }     return $valor_aleatorio;  } // Aplicamos la funcion $nombres = array('Pedro''Bea''Juan''Paco''Emma''Manolo''Antonio''Miguel''Vanesa''Angel''Marcos''Venus'); $n_aleator 4;    // Numero de aleatorios que extraemos  $nombres_aleatorios Aleator_Array($nombres,$n_aleator); echo "<p>$nombres_aleatorios</p>"; ?>
Que como podemos ver, su aplicación es idéntica a array_rand(), con la diferencia que nos da los valores sin tener que acceder a ellos por su key o clave.

Esta función nos puede permitir hacer cosas muy interesantes, como por ejemplo un generador de combinaciones aleatorias para probar suerte en la Lotería Primitiva.
<?php include(funcion_array_aleatorio.php); // Generamos array con el bucle while $inicio 1; while ($inicio 50){     $ar_numeros[] = $inicio;    // Creamos el array     // echo "Numeros: $inicio <br />";    // Imprimimos el bucle     $inicio += 1; } $mi_apuesta Aleator_Array($ar_numeros,6); echo "<p>$mi_apuesta</p>"; echo '<pre>'; print_r($ar_numeros); echo '</pre>'; ?>
Lo que hemos hecho ha sido muy sencillo, en lugar de escribir manualmente el array con los 49 números posibles de esta lotería en un array (resulta bastante pesado), hemos generado el array mediante un bucle while. Hemos escogido este tipo de bucle, por que se detiene en el momento en que se cumple una condición, en esta caso, que sea menor que 50 (lo números posibles de esta lotería comprenden los valores 1 a 49).
Tags: Array || aleatorio || array_rand || while || foreach

Comentarios.

Sin comentarios, publica el tuyo.