Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1763 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Function de tirage aleatoire [ RÉSOLU ! ]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Function de tirage aleatoire [ RÉSOLU ! ]

n°199734
SquiiiD
be cool !
Posté le 22-08-2002 à 12:21:57  profilanswer
 

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 :  
 

Code :
  1. function random_name($nom_recu, $taille_nom)
  2. {
  3. if($taille_nom>32) $taille_nom=32;
  4. $tab_char="abcdefghijklmnopqrstuvwxyz1234567890___";
  5. srand(time());
  6. $nom_recu = explode(".",$nom_recu);
  7. while($i<$taille_nom)
  8.  {
  9.  $random_char .= $tab_char[rand(0,strlen($tab_char))];
  10.  $i++;
  11.  }
  12. $return_name=$random_char.".".$nom_recu[1];
  13. return $return_name;
  14. }


 
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
mood
Publicité
Posté le 22-08-2002 à 12:21:57  profilanswer
 

n°199740
gwen2709
Posté le 22-08-2002 à 12:27:20  profilanswer
 

j'ai testé mais ce n'est pas tout le temps qu'elle renvoie le meme nom de fichier !

n°199741
SquiiiD
be cool !
Posté le 22-08-2002 à 12:29:17  profilanswer
 

si tu rafraichis la page ca changera mais si dans mon script x.php je met
 

Code :
  1. <?
  2. $nom1="aaa.jpg";
  3. $nom2="bbb.jpg";
  4. echo random_name($nom1, 20);
  5. echo random_name($nom2, 20);
  6. ?>


 
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 :(


Message édité par SquiiiD le 22-08-2002 à 12:39:29
n°199769
SquiiiD
be cool !
Posté le 22-08-2002 à 13:20:28  profilanswer
 

personne?

n°199804
_Mac_
Posté le 22-08-2002 à 13:50:26  profilanswer
 

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().".

n°199809
gwen2709
Posté le 22-08-2002 à 13:53:33  profilanswer
 

_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 !

n°199811
SquiiiD
be cool !
Posté le 22-08-2002 à 13:54:15  profilanswer
 

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


Message édité par SquiiiD le 22-08-2002 à 13:54:42
n°199813
youdontcar​e
Posté le 22-08-2002 à 13:55:32  profilanswer
 

srand() est fait pour initialiser le générateur, c'est donc à appeler une seule fois, et surtout pas dans une fonction.

n°199815
SquiiiD
be cool !
Posté le 22-08-2002 à 13:56:59  profilanswer
 

ha bon?

n°199821
SquiiiD
be cool !
Posté le 22-08-2002 à 13:59:13  profilanswer
 

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 ;)


Message édité par SquiiiD le 22-08-2002 à 13:59:53
mood
Publicité
Posté le 22-08-2002 à 13:59:13  profilanswer
 

n°199823
youdontcar​e
Posté le 22-08-2002 à 14:00:57  profilanswer
 

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.

n°199826
SquiiiD
be cool !
Posté le 22-08-2002 à 14:03:32  profilanswer
 

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

n°199828
youdontcar​e
Posté le 22-08-2002 à 14:06:59  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Function de tirage aleatoire [ RÉSOLU ! ]

 

Sujets relatifs
[PHP] Inclure une variable php dans <TITLE>[resolu][Java] Probleme de comprehension avec l'API Cryptix (maj : resolu)
[JS]comment mettre en variable '<script>...</script>' ?[resolu][C] A votre bon coeur, aidez moi a parser ca (resolu)
[PHP & HTML] nouveau problème de syntaxe (résolu)Comment enregistrer automatiquement une page PHP en HTML ? [RESOLU]
[VB 6] savoir ou notre application a été installé[RESOLU][QT for Linux] newbie inside... [RESOLU !!! :)]
[Visual C++] propriété d'un CButton [RESOLU][HTML CSS] select et style [resolu]
Plus de sujets relatifs à : Function de tirage aleatoire [ RÉSOLU ! ]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR