Eficiente rotación de banners con PHP
random rotation (3)
Giro un banner en mi sitio seleccionándolo al azar de una serie de banners.
Código de muestra como demostración:
<?php
$banners = array(
''<iframe>...</iframe>'',
''<a href="#"><img src="#.jpg" alt="" /></a>'',
//and so on
);
echo $banners(rand(0, count($banners)));
?>
La variedad de pancartas se ha vuelto bastante grande. Me preocupa la cantidad de memoria que esta matriz agrega a la ejecución de mi página. Pero no puedo encontrar una mejor manera de mostrar un banner al azar sin cargar todos los banners en la memoria ...
Cree una base de datos para almacenar los banners. Luego, cuando cargue la página, puede usar una consulta SQL para seleccionar una fila aleatoria.
SELECT * FROM banners ORDER BY RAND() LIMIT 1
Mueva los banners a archivos html y cambie la matriz para que contenga solo nombres de archivos.
Luego puede incluir ese archivo por su nombre, solo cargando el banner requerido.
Una forma de hacer esto sin requerir memoria de matriz o una base de datos, es seguir una convención de nomenclatura de imagen incremental, por ejemplo, nombrar sus imágenes "banner1.jpg", "banner2.jpg", etc. Luego puede hacer esto:
$int_banners = 10; // the number of banner images you have
$i = rand(1, $int_banners);
echo "<a href=''#''><img src=''banner$i.jpg'' alt=''''></a>"; // add an iframe too if you want
Si no puede utilizar dicha convención, puede crear una matriz con solo los nombres de los archivos (o usar una base de datos SQL para almacenar los banners, como se sugiere en otras respuestas).
$lst_banners = array("img1.jpg", "/home/img2.jpg", "/about/img3.jpg");
$int_banners = count($lst_banners);
$i = rand(0, ($int_banners - 1));
echo "<a href=''#''><img src=''" . $lst_banners[$i] . "'' alt=''''></a>";
O mejor, puedes usar array_rand () para encontrar el nombre del archivo, como lo sugiere Zlatan :
$lst_banners = array("img1.jpg", "/home/img2.jpg", "/about/img3.jpg");
$name = array_rand($lst_banners, 1);
echo "<a href=''#''><img src=''$name'' alt=''''></a>";