Function de tirage aleatoire [ RÉSOLU ! ] - PHP - Programmation
Marsh Posté le 22-08-2002 à 12:27:20
j'ai testé mais ce n'est pas tout le temps qu'elle renvoie le meme nom de fichier !
Marsh Posté le 22-08-2002 à 12:29:17
si tu rafraichis la page ca changera mais si dans mon script x.php je met
Code :
|
bah ca tire 2 fois le meme ...
si tu rafraichis ca sera un autre nom mais tjrs deux fois le meme
P.S.: j'ai essayé en mettant microtime a la place de time, et meme de reinitialisé la variable $random_char . mais ca change rien
Marsh Posté le 22-08-2002 à 13:50:26
time() te renvoie un nombre de secondes ; du coup, si tu executes 2 fois ta fonction dans la même seconde, le compteur de nombres aléatoires est initialisé avec la même valeur, et du coup les séquences générées seront toutes les mêmes.
Il faut plutôt utiliser un truc du genre :
srand(time().substr(microtime(), 2, 8));
Eventuellement même sans mettre le "time().".
Marsh Posté le 22-08-2002 à 13:53:33
_Mac_ a écrit a écrit : time() te renvoie un nombre de secondes ; du coup, si tu executes 2 fois ta fonction dans la même seconde, le compteur de nombres aléatoires est initialisé avec la même valeur, et du coup les séquences générées seront toutes les mêmes. Il faut plutôt utiliser un truc du genre : srand(time().substr(microtime(), 2, 8)); Eventuellement même sans mettre le "time().". |
EXACT !
Marsh Posté le 22-08-2002 à 13:54:15
salut mac j'ai essayé comme tu as dit et ca me sort a tout les coups
ttttttttt.jpg
ttttttttt.jpg
ttttttttt.jpg
ttttttttt.jpg
ttttttttt.jpg
y a plus rien d'aleatoire, tain c trop bizzare ce truc...
merci kan meme
Marsh Posté le 22-08-2002 à 13:55:32
srand() est fait pour initialiser le générateur, c'est donc à appeler une seule fois, et surtout pas dans une fonction.
Marsh Posté le 22-08-2002 à 13:59:13
Ben je viens de virer le srand() de ma fonction et je l'ai mis avant d'utiliser la fonction plusieur fois et la ca marche nickel !!! Bon bah je me coucherai moins con ce soir !
Merci youdontcare et les autres
Marsh Posté le 22-08-2002 à 14:00:57
SquiiiD a écrit a écrit : ha bon? |
l'algo pour générer un nombre aléatoire marche itérativement. en gros,
nouveauNombre = ancienNombre * constante + autreConstante
au début de ton programme, ancienNombre a une valeur hardcodée. ça produit donc toujours les mêmes nombres.
srand() change cette valeur. comme le dit _mac_, si tu utilises le nombre de secondes, tu spécifies la même valeur initiale, qui donnent alors des nombres identiques.
Marsh Posté le 22-08-2002 à 14:03:32
Oui ca j'avais compris mais je comprenais pas que ca me sorte tout le temps la meme suite alors que srand était activé ! Mais il était activé plusieur fois, et comme t'as dit qu'on peut l'activer qu'une fois j'ai testé et ca marche... mais je comprends quand meme pas pourquoi c'est impératif de l'activer une seule fois ...
tkx
Marsh Posté le 22-08-2002 à 14:06:59
SquiiiD a écrit a écrit : mais je comprends quand meme pas pourquoi c'est impératif de l'activer une seule fois ... |
ce n'est pas un état on / off. si tu donnes le temps en secondes courant, ça donne naissance à une certaine suite. si tu "l'actives" qq milli secondes + tard avec le même temsp en secondes, tu te retrouves avec la même suite (donc les mêmes nombres).
SquiiiD a écrit a écrit : Oui ca j'avais compris mais je comprenais pas que ca me sorte tout le temps la meme suite |
visiblement, non.
Marsh Posté le 22-08-2002 à 12:21:57
Bonjour, voila j'ai créé une fonction qui génere un nom de fichier aleatoire. La fonction marche, mais le probleme c'est que si je l'utilise 2 fois a la suite dans un meme script, elle va me tirer exactement la meme chose, et je capte pas pourquoi !!! voici ma fonction :
voila, pourtant j'ai mis srand(time()); au debut, qqun comprend ce qu'il se passe?? Parce que la...
EDIT: j'utilise 2 fois a la suite la fonction et ca me donne ca :
l1zehujsi25z_5sdxrh0.jpg
l1zehujsi25z_5sdxrh0.jpg
comprend po
Message édité par SquiiiD le 22-08-2002 à 13:59:25