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] Code de mise en relation


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 63
    Points
    63
    Par défaut [Tableaux] Code de mise en relation
    Bonjour,
    J'ai une liste de personne et je voudrais les mettre en relation de façon aléatoire sans qu'aucun ne puisse se retrouver seul.
    exemple j'ai: a,b,c,d,e,f

    je voudrais obtenir cette liste (user_id->user_dest)

    a->f
    b->d
    c->e
    d->a
    e->b
    f->c

    et sans qu'il y ai de relation réciproque du style
    a->b
    b->a

    J'ai commencé un code mais le problème et qu'il arrive parfois qu'un individu se retrouve tout seul.
    Dans ce cas par exemple
    a->b
    b->d
    c->a
    d->e
    e->c
    f->? (tout le monde a déjà été distribué et "f" ne peut être mis avec lui même)

    ou qu'on ai une relation reciproque :
    a->b
    b->d
    c->a
    d->c
    e->f
    f->? (il ne reste que "e" à distribuer alors que "e" est déjà avec f)

    Voilà mon code : Merci d'avance
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
     
        $From = array(); 
        $To = array();
     
    $sql = "SELECT user_id FROM user_groups where group_id = '$group' order by RAND()"; 
    $sql2 = mysql_query($sql) or die(mysql_error()); 
    while ($Rowsql2 = mysql_fetch_assoc($sql2)) 
    { 
    array_push($From, $Rowsql2['user_id']); 
    } 
     
    $sql = "SELECT user_id FROM user_groups where group_id = '$group' order by RAND()"; 
    $sql2 = mysql_query($sql) or die(mysql_error()); 
    while ($Rowsql2 = mysql_fetch_assoc($sql2)) 
    { 
    array_push($To, $Rowsql2['user_id']);
    } 
    foreach ($From as $MembreFrom) {
     
    $sql = "SELECT user_id FROM user_groups where user_dest = '$MembreFrom' and group_id = '$group'"; 
    $sql2 = mysql_query($sql) or die(mysql_error());
    while($data = mysql_fetch_array($sql2)) 
    { 
    $fromfirst = $data['user_id']; 
    } 
     
    foreach ($To as $Key => $Value) { 
     
    if ($Value!=$fromfirst) {     
         //pour éviter les relations réciproques
    if ($Value!=$MembreFrom) { 
                    //Pour éviter qu'un membre ne soit avec lui même 
    if ($Value) { 
     
    $sql = "UPDATE user_groups SET user_dest='$Value' where user_id='$MembreFrom' and group_id = '$group'";                     
    $sql2 = mysql_query($sql) or die(mysql_error());
     
    $To[$Key] = false; 
                    //Marque ce membre comme déjà en relation
    break; 
    } 
    } 
    }
         } 
    }

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 51
    Points : 50
    Points
    50
    Par défaut
    Salut,

    Je pense que ce code pourrait répondre à tes attentes, la seule condition est que les 2 tableaux aient le même nombre de valeur.

    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
     
    <?php 
     
        $From = array(); 
        $To = array();
     
    	$sql = "SELECT user_id FROM user_groups where group_id = '$group' order by RAND()"; 
    	$sql2 = mysql_query($sql) or die(mysql_error()); 
     
    	while ($Rowsql2 = mysql_fetch_assoc($sql2)) 
    	{ 
    	array_push($From, $Rowsql2['user_id']); 
    	} 
     
    	$sql = "SELECT user_id FROM user_groups where group_id = '$group' order by RAND()"; 
    	$sql2 = mysql_query($sql) or die(mysql_error()); 
    	while ($Rowsql2 = mysql_fetch_assoc($sql2)) 
    	{ 
    	array_push($To, $Rowsql2['user_id']);
    	} 
     
    	shuffle($To);
    	$tab_melange = array_combine($MembreFrom,$To);
     
    	foreach ($tab_melange as $Key => $Value) 
    	{ 
    		$sql = "UPDATE user_groups SET user_dest='$Value' where user_id='$key' and group_id = '$group'";                     
    		$sql2 = mysql_query($sql) or die(mysql_error()); 
    	} 
    ?>

  3. #3
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 63
    Points
    63
    Par défaut message erreur pour array_combine
    J'ai installé php5 pour array_combine mais j'ai ce message d'erreur

    Warning: array_combine() expects parameter 1 to be array, null given in envoi.php

    Merci encore.

  4. #4
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 63
    Points
    63
    Par défaut petite erreur
    Ok désolé c'est bon c'était juste une petite erreur $MembreFrom à la place de $From

    Je continu à tester


  5. #5
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 63
    Points
    63
    Par défaut Aucun update effectué
    Marche pas, il ne fait aucun update

    Je remets le code avec juste la petite modif sur $MembreFrom

    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
     
    <?php 
     
        $From = array(); 
        $To = array();
     
    	$sql = "SELECT user_id FROM user_groups where group_id = '$group' order by RAND()"; 
    	$sql2 = mysql_query($sql) or die(mysql_error()); 
     
    	while ($Rowsql2 = mysql_fetch_assoc($sql2)) 
    	{ 
    	array_push($From, $Rowsql2['user_id']); 
    	} 
     
    	$sql = "SELECT user_id FROM user_groups where group_id = '$group' order by RAND()"; 
    	$sql2 = mysql_query($sql) or die(mysql_error()); 
    	while ($Rowsql2 = mysql_fetch_assoc($sql2)) 
    	{ 
    	array_push($To, $Rowsql2['user_id']);
    	} 
     
    	shuffle($To);
    	$tab_melange = array_combine($MembreFrom,$To);
     
    	foreach ($tab_melange as $Key => $Value) 
    	{ 
    		$sql = "UPDATE user_groups SET user_dest='$Value' where user_id='$key' and group_id = '$group'";                     
    		$sql2 = mysql_query($sql) or die(mysql_error()); 
    	} 
    ?>

  6. #6
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 63
    Points
    63
    Par défaut
    Bon le code marche il manquait juste une majuscule a $Key mais j'ai le même problème qu'avec mon ancien code il me met une personne avec lui même

    comme ceci

    a -> b
    b -> a
    c -> c (c avec lui même)

    je remet le code avec la majuscule a $Key

    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
     
     
    <?php 
     
        $From = array(); 
        $To = array();
     
    	$sql = "SELECT user_id FROM user_groups where group_id = '$group' order by RAND()"; 
    	$sql2 = mysql_query($sql) or die(mysql_error()); 
     
    	while ($Rowsql2 = mysql_fetch_assoc($sql2)) 
    	{ 
    	array_push($From, $Rowsql2['user_id']); 
    	} 
     
    	$sql = "SELECT user_id FROM user_groups where group_id = '$group' order by RAND()"; 
    	$sql2 = mysql_query($sql) or die(mysql_error()); 
    	while ($Rowsql2 = mysql_fetch_assoc($sql2)) 
    	{ 
    	array_push($To, $Rowsql2['user_id']);
    	} 
     
    	shuffle($To);
    	$tab_melange = array_combine($From,$To);
     
    	foreach ($tab_melange as $Key => $Value) 
    	{ 
    		$sql = "UPDATE user_groups SET user_dest='$Value' where user_id='$Key' and group_id = '$group'";                     
    		$sql2 = mysql_query($sql) or die(mysql_error()); 
    	} 
    ?>
    Si vous avez une idée sur les modifs a apporter?
    Merci d'avance.

Discussions similaires

  1. [Tableaux] Code PHP dans un echo
    Par flOZ dans le forum Langage
    Réponses: 7
    Dernier message: 24/05/2006, 09h40
  2. Réponses: 2
    Dernier message: 23/03/2006, 08h58
  3. [VB6] Code pour Mise à jour automatique
    Par marsup54 dans le forum VB 6 et antérieur
    Réponses: 45
    Dernier message: 10/02/2006, 18h05
  4. utilisation de tableaux : code correct ?
    Par kuzloka dans le forum C++
    Réponses: 5
    Dernier message: 25/12/2005, 20h16
  5. [Tableaux] Mise en relation des membres ?
    Par isa150183 dans le forum Langage
    Réponses: 9
    Dernier message: 20/12/2005, 23h36

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