Foros del Web » Programando para Internet » PHP »

Anuncios aleatorios y no duplicados

Estas en el tema de Anuncios aleatorios y no duplicados en el foro de PHP en Foros del Web. Hola, estoy intentando hacer en el pie de mi página una lista aleatoria de anuncios, y de hecho de momento la tengo bien, pero lo ...
  #1 (permalink)  
Antiguo 24/01/2010, 07:21
Avatar de Kaze71  
Fecha de Ingreso: enero-2010
Mensajes: 44
Antigüedad: 14 años, 3 meses
Puntos: 4
Anuncios aleatorios y no duplicados

Hola, estoy intentando hacer en el pie de mi página una lista aleatoria de anuncios, y de hecho de momento la tengo bien, pero lo que pasa es que se me duplican.

¿Podría alguien decirme qué código puedo usar para eliminar los anuncios duplicados?

De momento para mostrarlos tengo algo así:


Código PHP:
$file fopen("./ads/cant.txt""r");
$ads_cant fgets($file); // Lee el número escrito en "cant.txt", el cual será el número de anuncios publicados actualmente
fclose($file);

$current_ad 0;
while ((
$current_ad <= $ads_cant) && ($current_ad <= 6)) // Repite las acciones de abajo tantas veces como anuncios haya, mientras no sean más de 6
{
    
$ad[$current_ad] = rand(1,$ads_cant);
    
$current_ad++;

Pues lo que necesito es que la array $ad no tenga valores duplicados.

Espero no molestarlos con esta duda que a muchos seguramente parecerá simple, pero soy nuevo en esto T.T
  #2 (permalink)  
Antiguo 24/01/2010, 07:34
 
Fecha de Ingreso: enero-2010
Mensajes: 152
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Anuncios aleatorios y no duplicados

Código PHP:
Ver original
  1. $file = fopen("./ads/cant.txt", "r");
  2. $ads_cant = fgets($file); // Lee el número escrito en "cant.txt", el cual será el número de anuncios publicados actualmente
  3. fclose($file);
  4.  
  5. $current_ad = 0;
  6. while (($current_ad <= $ads_cant) && ($current_ad <= 6)) // Repite las acciones de abajo tantas veces como anuncios haya, mientras no sean más de 6
  7. {
  8.     $reemplazo=rand(1,$ads_cant);
  9.     if(array_search  ($reemplazo,$ad)===false)//se usan tres signos de = para que no repita el artículo si este se encuentra en el key 0.
  10.       {
  11.       $ad[$current_ad] = $reemplazo;
  12.       $current_ad++;
  13.       }
  14. }
  #3 (permalink)  
Antiguo 24/01/2010, 08:30
Avatar de Kaze71  
Fecha de Ingreso: enero-2010
Mensajes: 44
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Anuncios aleatorios y no duplicados

Muchas gracias ^^
  #4 (permalink)  
Antiguo 24/01/2010, 09:19
Avatar de xbx
xbx
 
Fecha de Ingreso: mayo-2008
Ubicación: /home/xbx
Mensajes: 301
Antigüedad: 15 años, 11 meses
Puntos: 11
Respuesta: Anuncios aleatorios y no duplicados

Código PHP:
$cantidad file_get_contents("ads/cant.txt");
$ads_cant=$cantidad>6?6:$cantidad;
$ad range(0,$ads_cant);
$ad shuffle($ad); 
La simplicidad ante todo.
  #5 (permalink)  
Antiguo 24/01/2010, 09:39
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años
Puntos: 50
Respuesta: Anuncios aleatorios y no duplicados

Cita:
Iniciado por xbx Ver Mensaje
Código PHP:
$cantidad file_get_contents("ads/cant.txt");
$ads_cant=$cantidad>6?6:$cantidad;
$ad range(0,$ads_cant);
$ad shuffle($ad); 
La simplicidad ante todo.
La función shuffle recibe un array por referencia y devuelve un valor booleano que indica el éxito. Al asignárselo a la variable $ad estarías perdiendo el array. ¡Suerte!
  #6 (permalink)  
Antiguo 24/01/2010, 09:44
Avatar de xbx
xbx
 
Fecha de Ingreso: mayo-2008
Ubicación: /home/xbx
Mensajes: 301
Antigüedad: 15 años, 11 meses
Puntos: 11
Respuesta: Anuncios aleatorios y no duplicados

Cita:
Iniciado por dggluz Ver Mensaje
La función shuffle recibe un array por referencia y devuelve un valor booleano que indica el éxito. Al asignárselo a la variable $ad estarías perdiendo el array. ¡Suerte!
Gracias! es verdad.

Mas simple entonces:

Código PHP:
$cantidad file_get_contents("ads/cant.txt"); 
$ads_cant=$cantidad>6?6:$cantidad
$ad range(0,$ads_cant); 
shuffle($ad); 
Saludos,

Etiquetas: anuncios, duplicados, aleatoria
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:08.