Générateur de numéro.

Eléphant du PHP | 55 Messages

28 juil. 2009, 17:24

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
8-)
http://lilou141203.labrute.com : merci de vous battre contre ma p'tite brute! :P

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juil. 2009, 17:40

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.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 991 Messages

28 juil. 2009, 17:42

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 -_-
DevOps, Symfony4, Hoa

Eléphant du PHP | 55 Messages

28 juil. 2009, 17:53

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]

Eléphant du PHP | 55 Messages

28 juil. 2009, 19:38

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]

ViPHP
fab
ViPHP | 2657 Messages

28 juil. 2009, 20:07

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é :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 55 Messages

28 juil. 2009, 22:26

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]