Script en PHP que muestra un libro aleatorio a partir de un array de libros

  • Por
Un script que dispone de un array de libros y muestra uno de ellos escogido aleatoriamente, en un recuadro de una página web.
Vamos a ver un pequeño script que muestra un recuadro en una página web con un libro, que se ofrece para la venta, seleccionado aleatoriamente entre un conjunto de posibilidades.

El script se realiza utilizando un conjunto de libros almacenado en un array. Podía haberse utilizado una base de datos para almacenar los distintos libros, pero hemos utilizado un array -o tabla- por dos razones. La primera, porque este código lo hemos sacado de una página que no hace conexiones con bases de datos, por lo que teníamos que utilizar un array y cargar los datos en el código de la propia página. La segunda, razón tiene un sentido didáctico, porque nos sirve para hacer un ejemplo con arrays de dos dimensiones en PHP.

El ejercicio es muy simple. Podemos separarlo en tres bloques. 1) La carga de los datos del array de libros, 2) la generación de un número aleatorio para acceder a un libro al azar entre todos los posibles del array o tabla, y 3) la muestra de un recuadro en la página que obtiene los datos del array de libros, para mostrar el libro aleatorio.

La carga de datos se puede ver a continuación. Primero vamos a ver la creación de 10 arrays con los datos de cada uno de los libros. En concreto, de cada libro se almacenan los datos de interés, como su nombre, dirección con la que enlazar los enlaces para la compra y a imagen que habría que mostrar de cada libro. Más tarde, incluiremos esos arrays como distintas casillas de otra tabla, generando un segundo array que tendrá dos dimensiones. La primera será cada uno de los libros y la segunda cada una de las propiedades de los libros.

//creamos un conjunto de arrays con todos los libros que se quieren rotar aleatoriamente
$libro1 = array("Apache Práctico","http://www.libreria.com/Apache-Practico-n29833i.htm","29833.jpg");
$libro2 = array("Fotografía Digital para Profesionales","http://www.libreria.com/Fotografia-digital-para-profesionales-n37228i.htm","37228.jpg");
$libro3 = array("Java 2 Versión 1.4","http://www.libreria.com/Java-2-version-1-4-n10575i.htm","10575.jpg");
$libro4 = array("Hacker","http://www.libreria.com/Hacker-n10655i.htm","10655.jpg");
$libro5 = array("Música Digital","http://www.libreria.com/Musica-Digital-n10313i.htm","10313.jpg");
$libro6 = array("El Arte de los Juegos 3D","http://www.libreria.com/El-arte-de-los-juegos-3D-n10423i.htm","10423.jpg");
$libro7 = array("Wireless. Los mejores trucos","http://www.libreria.com/Wireless-Los-mejores-trucos-n27052i.htm","27052.jpg");
$libro8 = array("Hardware y componentes","http://www.libreria.com/Hardware-y-componentes-Edicion-2004-n10622i.htm","10622.jpg");
$libro9 = array("Consigue las Mejores Fotos con Tu Cámara Digital","http://www.libreria.com/Consigue-las-mejores-fotos-con-tu-camara-digital-n10310i.htm","10310.jpg");
$libro10 = array("DVD, DIVX y otros Formatos de Vídeo Digital","http://www.libreria.com/DVD-DivX-y-otros-formatos-de-Video-Digital-n10506i.htm","10506.jpg");

//creamos un array con todos los libros que deseamos que roten
$libros = array($libro1, $libro2, $libro3, $libro4, $libro5, $libro6, $libro7, $libro8, $libro9, $libro10);
//el resultado de crear este segundo array (que es un array de arrays) es un nuevo array de dos dimensiones.


El segundo bloque corresponde con la creación de un número aleatorio para aceder a un libro al azar de entre todos los posibles del array. Para ello debemos obtener un número que se encuentre entre el cero y nueve. Nueve es el número de libros posibles, que corresponde con las posiciones del array $libros menos uno.

//generamos un número aleatorio entre cero y el número de posiciones del array menos uno (los arrays en php empiezan en la posición cero)
srand((double)microtime()*1000000);
$valor_aleatorio = rand(0,count($libros)-1);


Para acabar, tenemos un código HTML que muestra un recuadro con un libro. Los datos del libro que mostrar se obtienen del array, accediendo por el índice obtenido aleatoriamente. Dada la variable aleatoria que tenemos, que se llama $valor_aleatorio, accederíamos al libro aleatorio con este código:

$libros[$valor_aleatorio]

Como el libro es a su vez otro array, para acceder a cada una de las posiciones utilizaríamos un índice. Para acceder al título del libro, tenemos que utilizar el índice primero:

$libros[$valor_aleatorio][0]

El código del recuadro quedaría de esta manera.

<table width="250" cellspacing="0" cellpadding="1" border="0" style="border-width: 1px; border-color: 808050; border-style: solid;">
<tr>
<td class=titcol><b>LIBRO RECOMENDADO</b></td>
</tr>
<tr>
<td class=fuente8 style="line-height:17px;"><table width=100% border=0 cellpadding=0 cellspacing=0 align=center><tr>
<td WIDTH=1><a href="<?echo $libros[$valor_aleatorio][1];?>" target="_blank"><img src="images/libros/<?echo $libros[$valor_aleatorio][2];?>" border=0></a></td>
<td width="5"></td><td valign=top class=fuente8><b><a href="<?echo $libros[$valor_aleatorio][1];?>" target="_blank"><?echo $libros[$valor_aleatorio][0];?></a></b><p class=fuente8><a href="<?echo $libros[$valor_aleatorio][1];?>" target="_blank">Compra este libro</a> en nuestra libreria a domicilio.</div></tr>
</table>
</td></tr>
</table>


Este ejemplo se puede ver en funcionamiento en la portada de DesarrolloWeb.com. Sabemos que es un código un poco específico, pero esperamos que sirva como ejemplo de uso de los arrays en PHP y en concreto de los arrays de dos dimensiones.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

José Acosta

30/5/2006
hay una línea que no entiendo cual es su funcionamiento,

srand((double)microtime()*1000000);

y después de esta línea si se que viene la búsqueda de un numero aleatorio entre 0 y la cantidad de posiciones del vector

$valor_aleatorio = rand(0,count($libros)-1);

de antemano muchas gracias por su ayuda

fixwah

09/10/2009
Más fácil
es más fácil usar

shuffle()