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, …
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:
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.
En el caso de solo desear un valor aleatorio, devuelve una cadena o string, si se desea mas de un valor, devolverá un array.$key_aleatorias = array_rand($mi_array, 3) $aleatorios[$key_aleatorias[0]] $aleatorios[$key_aleatorias[1]] $aleatorios[$key_aleatorias[2]]
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:
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.<?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>"; ?>
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.
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).<?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>'; ?>
Tags: Array || aleatorio || array_rand || while || foreach