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

PHP & Base de données Discussion :

Tirage au sort aléatoire particulier [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 3
    Par défaut Tirage au sort aléatoire particulier
    Bonjour,
    je me permets de vous demander de l'aide pour faire ceci :

    Dans ma table MySQL, j'ai un champs contenant des id d'user séparés par des virgules : 1,2,3,4

    J'aimerai créer un tirage aléatoire afin d'avoir ceci :
    1 => 2
    2 => 4
    3 => 1
    4 => 3

    La colonne en rouge étant générée aléatoirement, mais 1 => 1, 2=>2, etc. n'est pas possible.

    Après quelques recherches sur Internet, j'arrive à générer ma liste de gauche, j'arrive à générer la liste rouge aléatoirement avec shuffle, mais je bloque sur le faire de dire que 1 ne doit pas correspondre à 1, 2 à 2 etc.

    Par avance, merci pour votre aide,
    M.

  2. #2
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    Là comme ça, je ne pourrais t'aider sans ton code et ma réponse sera donc toute "bête"...

    Test si ta clé (colonne de gauche) est égal à ta valeur (colonne rouge)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if($cle === $$value){
     //on regénère
    }

  3. #3
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 327
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 327
    Billets dans le blog
    17
    Par défaut
    Les index et les valeurs ont-ils un lien ?

    Ex. si tu as 1, 4, 5, 8, peux-tu obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1 => 4
    2 => 1
    3 => 8
    4 => 5
    Ou bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1 => 5
    4 => 4
    5 => 8
    8 => 1
    ??

  4. #4
    Membre émérite
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Par défaut
    Bonjour,

    un truc dans ce genre là ?

    Code php : 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
     
     
    $numbers = $num2 = range(1, 4);
     
    do {
     
    shuffle($num2);
     
    if (  sizeof(array_intersect_assoc($numbers,$num2)) == 0 ) {
    	$res = array_merge($numbers,$num2);
    	foreach($res as $re) {
    		echo $re."<br /> ";
    	}
    }
     
     
    } while ( sizeof(array_intersect_assoc($numbers,$num2)) != 0);

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 3
    Par défaut
    Pardon, voici mon code de test, qui pour l'instant affiche :
    1
    2
    3
    4
    5
    3
    4
    2
    1
    5


    Voici le code de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $test = array("1","2","3","4","5");
    $test2 = array("1","2","3","4","5");
    shuffle($test2);
    $res = array_merge($test,$test2);
    foreach($res as $res) {
    	echo $res."<br /> ";
    }
    ?>

  6. #6
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    J'essaye de te faire ça, je reposte d'ici quelques minutes

    edit: grillé, j'attends de savoir si son code te va

    edit2: Tant qu'à faire, ça fonctionne alors autant poster, t'auras l'embarras du choix?

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <?php
     
      function pre($array){
        echo '<pre>';
          print_r($array);
        echo '</pre>';
      }
      $colonne_gauche = array("1","2","3","4","5");
      $colonne_droite = array();//futur tableau avec le tirage
      $assigne = array();//les nombres déjà assignés
      $i = 0;//début de ton tableau gauche
      do{
        $nb = rand(1, count($colonne_gauche));
        if(!in_array($nb, $assigne)){
          if($nb != $colonne_gauche[$i]){
            $colonne_droite[] = $nb;
            $assigne[] = $nb;
            $i++;
          }
        }
      }while(count($colonne_droite) != count($colonne_gauche));
     
      //tests (f5 pour plusieurs test ^^)
      echo 'colonne_gauche:';
      pre($colonne_gauche);
      echo '<br />';
      echo 'colonne_droite:';
      pre($colonne_droite);
      echo '<br />';
      echo 'assigne:';
      pre($assigne);
      echo '<br />';
     
    ?>

  7. #7
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 3
    Par défaut
    Merci pour votre aide,
    @Séb. c'est en effet la 2ème solutions que je recherche.
    @syl2095 @radicaldreamer : en fait c'est carrément un mix des 2 codes, le premier affiche une ligne, suivie d'une autre de façon aléatoire ou 1 != 1, 2 !=2, etc., le code de radicaldreamer affiche bien 2 colonnes, la 2ème étant aléatoire. En revanche, après quelques tests, j'ai parfois 1 = 1.
    Edit : Autant pour moi, l'exception est respectée. C'est parfait. Bravo et merci.

    Je vais tenter de mixer vos 2 codes en rentrant du boulot, et je posterai le code final pour résoudre le problème (si j'y arrive). Merci pour votre aide. C'est vraiment appréciable.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction de tirage au sort aléatoire.
    Par Luke spywoker dans le forum Débuter
    Réponses: 3
    Dernier message: 31/05/2013, 21h08
  2. [XL-2003] Tirage au sort aléatoire
    Par PAUL87 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/10/2011, 12h03
  3. [XL-2003] Formule pour tirage au sort aléatoire
    Par MattLeBlanc dans le forum Excel
    Réponses: 5
    Dernier message: 16/07/2011, 12h20
  4. [MySQL] tirage au sort particulier
    Par Invité dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/01/2010, 14h51
  5. Tirage au sort
    Par clampin dans le forum Langage
    Réponses: 2
    Dernier message: 19/12/2005, 16h38

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