RSS

Llenar arreglo con números aleatorios sin repetirse PHP

07 Dic

Imaginen el siguiente problema, tienen que mostrar 4 posts de su blog aleatoriamente cada vez que el usuario refresque la página. Y digamos que en la BD tenemos un total 50 posts. Entonces; se tienen que elegir aleatoriamente 4 id’s de la tabla donde tienen alojados sus posts y mandar éstos a una sentencia de MySQL que se hará cargo de traer los id’s de dichos posts.

aleatorios

Bueno, este es un caso clásico de problema de algoritmos en la universidad: Llenar arreglo con números aleatorios sin repetirse, pero ahora ya con un efecto práctico. No tocaré el punto de llamada de la BD solo el algoritmo que llenará el arreglo que debe hacerse con una función de PHP que maximiza el obtener un número aleatorio, esta función es mt_rand().

El algoritmo nos dice lo siguiente:

  1. Crear arreglo (con o sin dimensión específica, en este caso la dimensión será la que definamos en el ciclo)
  2. Crear un número aleatorio (del 1 al 50) e insertarlo en el arreglo (Al ser el primero, no es necesario verificar si ya hay alguno repetido).
  3. Crear una variable para condicionar un ciclo a=1
  4. Mientras que x <= 3 (es decir, el número de elementos que deseamos dentro del arreglo, no olvidar que ya hay un elemento. La condición dice que menos o igual 3, es decir el arreglo termina con 4 elementos)
  5. Crear un número aleatorio
  6. Si número aleatorio ya existe en el arreglo, regresar a 5.
  7. Si número aleatorio no existe previamente, insertarlo e incrementar variable x para insertar otro regresar a 5.
  8. Arreglo con 4 posiciones sin repetición en su elementos

Ahora veamos esto mismo con código PHP

//Se crea el arreglo
$valoresRandom = array();

//Se crea el primer número aleatorio
$valorRandomPrimero = mt_rand(1,50);
//Se inserta
array_push($valoresRandom, $valorRandomPrimero);

//Se crea variable para iterar
$x = 1;

//El if describe el paso 6. y else describe el paso 7
while ($x <= 3) {
    $siguienteValorRadom = mt_rand(1, 50);
    if(in_array($siguienteValorRadom, $valoresRandom)){
        continue;
    }else{
	array_push($valoresRandom, $siguienteValorRadom);
	$x++;
    }
}

//Al final se obtendrá $valoresRandom con 4 elementos aleatorios que van del 1-50 sin repetirse 

Ya después con este arreglo de 4 elementos con los id’s de los posts, se manda a llamar tu función correspondiente a la tabla de tus posts para que obtenga la información de dichos posts.

El caso práctico lo puedes ver en huguidugui.com en la barra antes de llegar al footer, están los posts mostrados en introducción y cada vez que se recarga la página, se cambian y siempre son distintos posts los que se muestran.

posts

Ojalá te sirva este pequeño fragmento de código que me funcionó bastante. Cualquier duda o comentario será bienvenido en ringhugos@gmail.com

Saludos a todos.


Por cierto, este libro de sobre estructuras de C con código de colas, pilas y árboles te pueda interesar

O si te interesa bajarte cualquiera de los libros que tengo en mi GoogleDrive

 

Si necesitas hosting y dominio gratuito para tus desarrollos y probarlos online, te recomiendo 000webhost

Anuncios
 
Deja un comentario

Publicado por en 7 diciembre, 2016 en PHP

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: