IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] 5 nombres aléatoires uniques


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    Points : 33
    Points
    33
    Par défaut [Tableaux] 5 nombres aléatoires uniques
    Bonjour,
    je voudrais stocker 5 nombres aléatoires uniques dans un tableau.
    je rencontre encore quelques problèmes avec mon code car par moment j'ai des nombres en double :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $tabnb[0] = rand(1,15);
     
    for($i=1;$i<6;$i++)	 
      {
        $choix = rand(1,15);
     
    	 for($j=0;$j<$i;$j++)
    	   {
    	     if($tabnb[$j] == $choix)
    		    {
    			  $choix = rand(1,15);
    			}
    			 else
    			{
    			  $tabnb[$i] = $choix;
    			}
    	    }
         echo $i.' : ';
    	 echo $tabnb[$i-1];	
    	 echo '<br><br>';
      }

  2. #2
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Points : 878
    Points
    878
    Par défaut
    Ouch ! Regarde du côté de in_array
    Zend PHP Certified Engineer, Certifié Symfony2
    blog : blog.lepine.pro
    Secrétaire de l'AFUP (Association des Utilisateurs de PHP)

  3. #3
    Membre éclairé
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Points : 689
    Points
    689
    Par défaut
    Pourquoi ne pas utiliser uniqid() de php ?

    http://fr.php.net/manual/fr/function.uniqid.php

    Cette fonction est plus ou moins faite pour ca.

    Il faut nécessairement que ton nombre soit compris entre 0 et 15 ?

    Mais peut-etre que c'est plutot un truc comme ca qui te conviendrais (j'ai ecris ca vite fait, j'ai pas teste mais ca te donne une idee de la marche a suivre) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $tabNb = array();
     
    function genUniqNb($tab) {
     
    	$uniqNb = rand(1,15);
     
    	if(in_array($uniqNb,$tab)) genUniqNb($tab);
    	else return $uniqNb;
     
    }
     
    for($i=1;$i<6;$i++) {
     
    	$tabNb[$i] = genUniqNb($tabNb);
     
    	echo "<p>$i : {$tabnb[$i]}</p>";
     
    }
    Spécialité : Développement WEB
    Indispensables : Doc PHP ~ Doc MySQL ~ w3schools ~ validateurs W3C ~ Google Adwords ~ PHP-Tester


  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Merci keaton2000

    j'ai utilisé ta fonction mais par moment il n'y a pas de valeur dans le tableau.

    j'ai également modifié le $tabNb en majuscule car ce ne fonctionnait pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<p>$i : {$tabnb[$i]}</p>";
    Que faut il faire pour y remédier.

    merci d'avance

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par jiojio Voir le message
    j'ai utilisé ta fonction mais par moment il n'y a pas de valeur dans le tableau.
    comment as tu testé son code ? son code fonctionne dans 80 % des cas, il y a juste parfois des cases vides parce qu'il y un "return" qui manque mais sinon le reste de son code fonctionne très bien

    et sinon pour la génération du tableau je propose ça pour limiter les tests et les appel récursifs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $liste = range(1, 15);              // liste de 1 à 15
    shuffle($liste);                    // mélange de la liste
    $liste = array_slice($liste, 0, 6); // découpage pour garder les 6 premières valeurs
     
    print_r($liste);

  6. #6
    Membre éclairé
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Points : 689
    Points
    689
    Par défaut
    Comme je t'ai dit, je n'ai pas teste le code, c'est plus du domaine de l'ebauche, pour comprendre l'interet de la recursivite dans ce cas la.

    Cependant, comme l'a dit mathieu, pour une liste de seulement 15 valeurs, un liste desordonnee puis tronquee seras surement plus rapide a l'execution. Je n'y avait pas pense. Garde le bout de code que je t'ai montre pour les tranches plus importantes (generer une valeur comprise entre 1 et 10000 par exemple).

    Et si tu as besoin de plus, il te reste uniqid dans la fonction a la place de rand (moi je fais toujours un test de doublons quand meme au cas ou ^^)

    -------------

    Pour le return qui manque, ca doit etre par la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(in_array($uniqNb,$tab)) return genUniqNb($tab);
    quel etourdi je fais
    Spécialité : Développement WEB
    Indispensables : Doc PHP ~ Doc MySQL ~ w3schools ~ validateurs W3C ~ Google Adwords ~ PHP-Tester


  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    ah oui c'est parfait là !!

    merci à tous !

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    j'ai parlé trop vite !
    il reste des trous dans la fonction.

  9. #9
    Membre éclairé
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Points : 689
    Points
    689
    Par défaut
    Avec ca (j'ai teste cette fois ), je n'ai aucun trous ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    $tabNb = array();
     
    function genUniqNb($tab) {
     
    	$uniqNb = rand(1,15);
     
    	if(in_array($uniqNb,$tab)) return genUniqNb($tab);
    	else return $uniqNb;
     
    }
     
    for($i=1;$i<6;$i++) {
     
    	$tabNb[$i] = genUniqNb($tabNb);
     
    	echo "<p>$i : {$tabNb[$i]}</p>";
     
    }
    Spécialité : Développement WEB
    Indispensables : Doc PHP ~ Doc MySQL ~ w3schools ~ validateurs W3C ~ Google Adwords ~ PHP-Tester


Discussions similaires

  1. Génération d'une nombre aléatoire unique
    Par jopont dans le forum BIRT
    Réponses: 18
    Dernier message: 30/06/2013, 08h49
  2. Nombre aléatoire unique
    Par poussinvert dans le forum C#
    Réponses: 8
    Dernier message: 24/02/2013, 22h18
  3. Un champs de nombres aléatoires uniques qui ne se suivent pas ?
    Par muad'dib dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 09/04/2008, 13h53
  4. nombre aléatoire unique
    Par Alex35 dans le forum VB.NET
    Réponses: 20
    Dernier message: 08/01/2008, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo