Ver Mensaje Individual
  #4 (permalink)  
Antiguo 05/11/2013, 20:48
Avatar de Cuervoo
Cuervoo
 
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 10 años, 7 meses
Puntos: 43
Respuesta: random sin que se repitan hasta finalizar

Claro, es lo mismo, lo que cambia es que agregás el archivo que vas a imprimir a un array para que después no lo repita

El resto queda igual, no tendrías que cambiar nada.

Mirá, quedaría asi:

Código PHP:
Ver original
  1. <?php
  2.     //tal cual como lo tenías
  3.     $carpeta = ".";/*Seleccionamos el directorio a recorrer*/
  4.     $dir = opendir($carpeta);/*Abrimos el directorio*/
  5.     while ($elemento = readdir($dir)){
  6.         if ($elemento != "." && $elemento != ".." && $elemento != "_random_ads.php"){/*Descartamos los ficheros que no nos interesa*/
  7.             $directorio[] = $elemento;
  8.         }
  9.     }
  10.    
  11.     //
  12.     //Acá agregamos...
  13.     //
  14.     //Si $_SESSION['campanas'] no está seteada,
  15.     //O tiene la misma cantidad de elementos que la cantidad de directorios (quiere decir que imprimió todos)...
  16.     //Le asignamos un array vacío
  17.     if (!isset($_SESSION['campanas']) || count($_SESSION['campanas']) == count($directorio))
  18.     {
  19.         $_SESSION['campanas'] = array();
  20.     }
  21.     do
  22.     {
  23.         $campania_aleatoria = array_rand($directorio);
  24.     } while (in_array($campania_aleatoria, $_SESSION['campanas']); //Repite la acción si la "campania" ya fue impresa
  25.    
  26.     //Una vez que tenemos una campania que todavia fue mostrada, la agregamos al array, para que después no la repita
  27.     $_SESSION['campanas'][] = $campania_aleatoria;
  28.    
  29.     //Imprime normalmente como lo tenías
  30.     echo "<iframe height='250' width='300' frameborder='0' scrolling='no' allowtransparency='true' src=".$directorio[$campania_aleatoria]." hspace='2' vspace='2' marginheight='1' marginwidth='1'></iframe>";
  31.     closedir($dir);/*Cerramos el directorio*/
  32.     ?>

Y con eso ya tendría que andar.