Page 1 sur 1

Générateur de numéro.

Posté : 28 juil. 2009, 17:24
par labyelo
Bonjour,
j'ai une série de numéro à quatre chiffres.
Ex: 0020, 0050, 0120, 0125 ...
Je souhaite générer de nouveaux numéros et éviter les doublons avec les numéros existants.
Merci de me donner quelque pistes :p

Anthony

Re: Générateur de numéro.

Posté : 28 juil. 2009, 17:40
par zeus
Bonjour,
j'ai une série de numéro à quatre chiffres.
Ex: 0020, 0050, 0120, 0125 ...
Où est-ce que tu mémorises les numéros déjà générés ?

Est-ce que tu as des règles spécifiques à respecter pour la génération ?

Sinon, pour générer un nombre à 4 chiffres, c'est simple :
$number = rand(0,9).rand(0,9).rand(0,9).rand(0,9);
Et pour éviter les doublons, il suffit, après génération, de regarder s'il est déjà existant et, si c'est le cas, de recommencer le traitement.

Il y a suffisement peu de probabilité que tu retombes sur un nombre existant pour que cette boucle soit suffisante.

Posté : 28 juil. 2009, 17:42
par thehawk
Je vais pas te donner du code car je ne trouve pas les accolades mais voici le cheminiement que j'utiliserai (pas forcement le meilleur)

function genNombre($array)

On génére un nombre
Apres if(in_array($nombre,$array))

on relance la fonction avec genNombre($array) // Recursivité
else
on retourne nombre


et cela s'utilise :

$nombre = array('0025' , '0520' etc);
$newnombre = genNombre($nombre);
$nombre = array_push($nombre , $newnombre);

Voici ma vision des choses
Bye Hawk

PS: vive mac quand on trouve pas les touches -_-

Posté : 28 juil. 2009, 17:53
par labyelo
Bonjour,
j'ai une série de numéro à quatre chiffres.
Ex: 0020, 0050, 0120, 0125 ...
Où est-ce que tu mémorises les numéros déjà générés ?

Est-ce que tu as des règles spécifiques à respecter pour la génération ?

Sinon, pour générer un nombre à 4 chiffres, c'est simple :
$number = rand(0,9).rand(0,9).rand(0,9).rand(0,9);
Et pour éviter les doublons, il suffit, après génération, de regarder s'il est déjà existant et, si c'est le cas, de recommencer le traitement.

Il y a suffisement peu de probabilité que tu retombes sur un nombre existant pour que cette boucle soit suffisante.
zeus, je te remercie pour ta bonne réponse! ;)
Je vais pas te donner du code car je ne trouve pas les accolades mais voici le cheminiement que j'utiliserai (pas forcement le meilleur)

function genNombre($array)

On génére un nombre
Apres if(in_array($nombre,$array))

on relance la fonction avec genNombre($array) // Recursivité
else
on retourne nombre


et cela s'utilise :

$nombre = array('0025' , '0520' etc);
$newnombre = genNombre($nombre);
$nombre = array_push($nombre , $newnombre);

Voici ma vision des choses
Bye Hawk

PS: vive mac quand on trouve pas les touches -_-
J'aime aussi ta piste, merci d'avoir répondu =P

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 28 juil. 2009, 19:38
par labyelo
Désolé de revenir vous ennuyer :oops:
Mais aurait-il moyen d'optimiser le code, et surtout es-ce que la technique est correct dans le cas ou le numéro existe?

ps; le fichier test est le code ci-dessous (il retourne sur lui même).
$number = rand(0,0).rand(0,9).rand(0,9).rand(0,9);
 
                 if(in_array($number, $array)){
                        echo $test = 'OK - '.$number.'<br>';
 
                        }else{
                                    header("Location: http://localhost/test.php");;
                                   }
Merci beaucoup,
Anthony

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 28 juil. 2009, 20:07
par fab
Utilisé la récursivité c'est plus approprié dans ces cas là qu'une redirection, au passage là tu déclares OK si tu trouves une occurrence dans le tableau ce qui est censé vouloir dire que que le nombre existe déjà!!

$array = array('0250','0350','0450'); // 

function genRandNumber($array)
{
  $number = rand(0,0).rand(0,9).rand(0,9).rand(0,9); 
  
  if(in_array($number,$array)) 
    return genRandNumber($array);
  else {
    $array[] = $number;
}

Avec ce code le dernier élément de ton tableau $array sera le dernier nombre aléatoire généré :)

Merci!

Posté : 28 juil. 2009, 22:26
par labyelo
Outch, quesque je suis en retard! Merci pour votre aide à tous! :wink:

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]