Foros del Web » Programando para Internet » PHP »

Url al azar de un archivo

Estas en el tema de Url al azar de un archivo en el foro de PHP en Foros del Web. Hola a todos!, estoy dando los primero pasos en PHP y ahora necesito una ayudita de uds. Tengo un archivo el cual contine una lista ...
  #1 (permalink)  
Antiguo 05/04/2003, 07:08
 
Fecha de Ingreso: noviembre-2002
Mensajes: 190
Antigüedad: 15 años
Puntos: 0
Url al azar de un archivo

Hola a todos!, estoy dando los primero pasos en PHP y ahora necesito una ayudita de uds.
Tengo un archivo el cual contine una lista de URLs de esta manera:
http://www.pepe.com
http://www.pepe1.com
http://www.pepe2.com

y necesito desde un script seleccionar sólo una al azar, en lo posible que no se vea dos veces sigidas la misma url.
¿el archivo en muy gran, 1000 urls, funcionará muy lento?
  #2 (permalink)  
Antiguo 05/04/2003, 08:04
Avatar de josgat  
Fecha de Ingreso: noviembre-2002
Mensajes: 137
Antigüedad: 15 años
Puntos: 0
Hola, puedes utilizar las funciones srand() y rand() para generar un número aleatorio que tenga como máximo el número de líneas de tu fichero y despues acceder a la línea que te ha generado aleatoriamente.

Enga

ADEU
  #3 (permalink)  
Antiguo 05/04/2003, 15:56
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 3 meses
Puntos: 8
Lo mejor seria cargar estas urls en un array. de esta forma:
Código PHP:
$urls[] = "http://www.pepe.com";
$urls[] = "http://www.pepe1.com";
$urls[] = "http://www.pepe2.com"
Ya que de esta menera despues podes hacer un rand mas facilmente con la funcion shuffle.
Código PHP:
srand (time());  //sembramos la semilla de numero aleatorios
shuffle ($urls);  // desordenamos el array 
Y despues solamente tomas el primer elemento del array y tenes una url al azar!
Código PHP:
$urlalazar $urls[0]; 
Despues para que no te toquen dos veces el mismo tenes que pantearte algo:
1 - Que no salgan dos veces
+++que podrias hacerlo guardando en una archivo de texto la ultima url.
2 - Y lo que seria mas logico, que no le toquen 2 veces lo mismo a un mismo usuario, y en ese caso tendrias que usas sesiones.

Saludos

Última edición por fran86; 05/04/2003 a las 15:58
  #4 (permalink)  
Antiguo 05/04/2003, 16:38
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 3 meses
Puntos: 8
Aca esta tu respuesta para el punto 2: (basada en un post de Cluster sobre sesiones en las FAQ).

Código PHP:
$urls[] = "http://www.pepe.com";
$urls[] = "http://www.pepe1.com";
$urls[] = "http://www.pepe2.com";
srand ((float) microtime() * 10000000);;  //sembramos la semilla de numero aleatorios
//shuffle ($urls);  // desordenamos el array

session_start(); // incio de uso de sesiones.
$urlanterior $_SESSION['ultimaurl'];  // tomamos de la sesion la ultina url publicada
$urls array_diff($urls, array($urlanterior));   // quitamos $urlanterior en la lista de urls
$indicealeatorio array_rand($urls);   // tomamos un indice aleatorio
$_SESSION['ultimaurl'] = $urls[$indicealeatorio]; // registramos la nueva url en la sesion
$urlalazar $urls[$indicealeatorio];  // esto es una url al azar que no se 2 veces.

echo nl2br("Anterior: $urlanterior\nAl azar: $urlalazar"); 
http://www.php.net/array_diff
http://www.php.net/array_rand
  #5 (permalink)  
Antiguo 06/04/2003, 18:38
 
Fecha de Ingreso: noviembre-2002
Mensajes: 190
Antigüedad: 15 años
Puntos: 0
Muchas gracias, por tu ayuda me vino muy bien, pero lo
que yo necesito es listar TODAS las urls NO UNA SOLA y tiene que mostrarse
al azar, es decir siempre en distintos ordenes. ¿alguna ayuda?

supongamos que tengo el siguiente listado
tengo el siguen código que me muestra una url al azar si repedir, pero lo
que yo necesito es listar TODAS las urls NO UNA SOLA y tiene que mostrarse
al azar, es decir siempre en distintos ordenes. ¿alguna ayuda?.

Supongamos que tengo el siguiente listado:
<?php
$urls[] = "http://www.url-001.com";
$urls[] = "http://www.url-002.com";
$urls[] = "http://www.url-003.com";
$urls[] = "http://www.url-004.com";
$urls[] = "http://www.url-005.com";
$urls[] = "http://www.url-006.com";
$urls[] = "http://www.url-007.com";

lo que yo necesitaría es, cambiar el orden de cada url de manera aleatoria, cada vez que se ejecute.

Desde ya muchas gracias!
  #6 (permalink)  
Antiguo 06/04/2003, 18:48
 
Fecha de Ingreso: noviembre-2002
Mensajes: 190
Antigüedad: 15 años
Puntos: 0
Cambiar el orden de un array aleatoriamente - AYUDA!

Supongamos que tengo el siguiente listado:
<?php
$urls[] = "http://www.url-001.com";
$urls[] = "http://www.url-002.com";
$urls[] = "http://www.url-003.com";
$urls[] = "http://www.url-004.com";
$urls[] = "http://www.url-005.com";
$urls[] = "http://www.url-006.com";
$urls[] = "http://www.url-007.com";

lo que yo necesitaría es, cambiar el orden de cada url de manera aleatoria, cada vez que se ejecute.

Desde ya muchas gracias!
  #7 (permalink)  
Antiguo 06/04/2003, 19:01
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 16 años, 4 meses
Puntos: 9
Tengo para uno, pero a ver si se puede desarrollar a partir de esto:

Código PHP:
$numlinks 3//numero de URLS que se rotarán
$random rand(1,$numlinks);
$urls= array();

// pones las direcciones aca


echo "$urls[$random]"
Salu2
  #8 (permalink)  
Antiguo 06/04/2003, 22:15
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años
Puntos: 1
No se que tan aleatorio sea pero te servira.
Código PHP:
<?
$numero 
"4";//El numero de url que tienes en este caso 4

$array = array ( "http://www.algo.com""http://www.algo2.com",
                       
"http://www.algo3.com""http://www.algo4.com");

$rand rand("0",$numero);
echo 
"<a href=\"".$array[$rand]."\">".$array[$rand]."</a>";
?>
http://www.php.net/manual/es/function.rand.php

Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #9 (permalink)  
Antiguo 06/04/2003, 22:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Usa solo la función shuffle ()

shuffle ($urls); // desordenamos el array

Eso ya desordena los indices del array .. luego lees ese array con un bucle tipo foreach() y ya lo tienes ...

Código PHP:
<?php
$urls
[] = "http://www.url-001.com";
$urls[] = "http://www.url-002.com";
$urls[] = "http://www.url-003.com";
$urls[] = "http://www.url-004.com";
$urls[] = "http://www.url-005.com";
$urls[] = "http://www.url-006.com";
$urls[] = "http://www.url-007.com";

shuffle ($urls);  // desordenamos el array
foreach($urls as $url){
   echo 
$url."<br>";
}
?>

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 07/04/2003, 00:50
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 3 meses
Puntos: 8
No estoy muy seguro, pero me parece que cuando usamos shuffle() es conveniente usar srand().
Código PHP:
srand ((float) microtime() * 10000000);
shuffle ($urls);  // desordenamos el array
foreach($urls as $url){
   echo 
$url."<br>";

  #11 (permalink)  
Antiguo 07/04/2003, 01:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm .. pues srand() dice el manual de PHP:

Cita:
Since PHP 4.2.0 it's no longer necessary to seed the random number generator before using it.
Sin embargo:
Cita:
This function shuffles (randomizes the order of the elements in) an array. You must use srand() to seed this function.
Probé el código tal cual puse (sin srand() ) en PHP 4.3.0 y función bastante aleatorio ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 07/04/2003 a las 01:07
  #12 (permalink)  
Antiguo 07/04/2003, 01:57
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 3 meses
Puntos: 8
Buff!
Si el manual se contradice que va se ser de nosotros!

Por suerte tenemos tus pruebas Cluster!
  #13 (permalink)  
Antiguo 08/04/2003, 02:32
 
Fecha de Ingreso: noviembre-2002
Mensajes: 190
Antigüedad: 15 años
Puntos: 0
gracias! a todos

funciona de las 2 formas bien. pero creo que es más aleatorio sin

srand ((float) microtime() * 10000000);

rotaba mejor las posiciones.

Gracias!
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 15:11.