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 :

Probleme avec Array_merge pour fusionner deux tableaux ayant meme cle [PDO]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    Bonjour j'ouvre un nouveau topic suite a celui que j'ai ouvert hier car je suis a nouveau confrontée a un petit probleme.
    J'ai deux tableaux, chacun ayant pour clé "organisme" et pour valeurs un id_Protéine.
    Je cherche a fusionner ces deux tableaux de maniere a ce que pour chaque clé commune, j'ajoute les id_prot du 1er tableau et du second sans répéter la clé a chaque fois.
    Si aucune valeur n'est retrouvée dans le second tableau pour une clé donnée, j'affiche "Aucune".
    Par ailleurs, si une clé existe dans le second tableau mais pas dans le 1er, je cherche a ajouter cette clé avec ses id_Proteines correspondantes.

    Voici mes deux tableaux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $res = $req_Dom_Gen->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
    $res1 = $req_Dom_Gen1->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);

    Et voici ce que j'ai essayé de faire en suivant la doc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function array_merge_keys($res, $res1) {
        foreach($res1 as $k=>$v) {
            if (!array_key_exists($k, $res)) { 
                $res[$k]=$v;
            }
            else { 
                if (is_array($v)) { 
                    $res[$k]=array_merge_keys($res[$k], $res1[$k]);
                }
            }
        }
        return $res1;
    }
    Mais cela ne m'affiche rien du tout. Pourtant j'ai l'impression d'etre pres du but.
    Quelqu'un aurait-il une solution svp?

    Merci a vous.

    J'ai oublié de préciser que meme avec un echo, rien ne s'affiche. Pourtant, lorsque je traite individuellement mes deux tableaux, ils me renvoient bien les résultats attendus donc l'erreur ne vient pas de la mais de la maniere dont j'ai utilisé la fonction array_merge.

    Voila, merci encore.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu veux dire quoi par ajouter les id ?

    Par exemple tu as

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tab1 = array('zorglub'=>12345);
    $tab2 = array('zorglub'=>6789);
    tu veux obtenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tab3 = array('zorglub'=>array('12345', '6789'));
    ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Oui, c'est exactement cela.
    Si on prend un exemple dans mon cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $res=array("Plasmodium"=>P53001, "Leishmania"=>TS5460, "T.Vaginalis"=>PY00089)
    $res1=array("Plasmodium"=>SF45679, "Leishmania"=>TF3489, "T.Vaginalis"=>PF67888,"C.Parvum"=>SF78009)
    Je chercher a produire un resultat du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Plasmodium:
    P53001
    SF45679
     
    Leishmania:
    TS5460
    TF3489
     
    T.Vaginalis:
    PY00089
    PF67888
     
    C.Parvum:
    SF78009
    Voila je regroupe les id_Proteine des deux tableaux en fonction du nom de l'organisme et je rajoute les noms d'organisme avec leur id correspondant qui existent dans le second tableau et pas dans le 1er. Tu vois ce que je veux faire?
    J'ai pensé que la fonction array_merge serait la meilleure solution mais etant novice en PHP,j'ai un peu du mal a l'utiliser

    PS:excuse moi pour l'absence de certains accents, c'est un ordinateur américain.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pourquoi est-ce que tu fais deux requêtes ? Tu interroges deux serveurs ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    Non, en fait si j'ai fais deux requetes c'est parce que mes deux requetes renvoient chacune un id_Prot mais issue d'une table differente et j'ai besoin de cette distinction lors de l'affichage car selon la table d'ou est issue l'id_Prot, je fais un affichage different alors que si j'avais fait une requete unifiee, cela n'aurait pas ete possible.

    Voici ma 1ere requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req_Dom_Gen= $db->query(("SELECT DISTINCT PROTEINE.organisme, PROTEINE.id_Prot, OCC_DC.id_Prot FROM PROTEINE, OCC_DC WHERE OCC_DC.id_Dom = '$domaine' AND PROTEINE.id_Prot=OCC_DC.id_Prot ORDER BY PROTEINE.organisme ASC"));
    Voici la seconde:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req_Dom_Gen1= $db->query(("SELECT DISTINCT PROTEINE.organisme, PROTEINE.id_Prot, OCC_NVDC_PAR_DC.id_Prot FROM PROTEINE, OCC_NVDC_PAR_DC WHERE OCC_NVDC_PAR_DC.id_Dom = '$domaine' AND OCC_NVDC_PAR_DC.FDR <='$FDR' AND PROTEINE.id_Prot=OCC_NVDC_PAR_DC.id_Prot ORDER BY PROTEINE.organisme ASC"));
    Tu vois j'ai 2 principales tables:OCC_DC et OCC_NVDC_PAR_DC
    Les deux vont me donner un id_Prot mais qui a donc une signification differente selon la table (La 1ere designe les proteines d'occurence connue alors que la seconde designe les proteines de nouvelle occurence)

    Voila pourquoi je suis passee par 2 requetes.
    A moins qu'il y ait une solution d'afficher differemment ces id_Prot selon la table dans une requete unifiee?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    Voila ou j'en suis:

    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
        foreach($res as $k=>$a) {
        printf ('<h1>%s</h1>','<center><div style="color:#FF0000;">'.$k.'</center></div>');
        echo '<ul>';
        echo '<h2><center><div style="color:#0000FF;">Occurrences Connues:</h2></center></div>';
     
        foreach ($a as $v) {
        $id=substr($v,0,-1);
     
        printf ('<li>%s</li>',"<center><"."<a href=\"http://www.lirmm.fr/~terrapon/coddDB/$id.html\">$id</a>"."></center>");
        }
        echo '</ul>';
        echo '<h2><center><div style="color:#0000FF;">Nouvelles Occurrences:</h2></center></div>';
        if (array_key_exists($k, $res1)) { 
         	foreach ($res1 as $k => $a1) {
        	foreach ($a1 as $v1) 					
            {printf('<li>%s</li>', "<center><"."<a href=\"http://www.lirmm.fr/~terrapon/coddDB/".$v1.".html\" >$v1</a>"."></center></div>");}
            }   
        }
    Je parviens a afficher correctement les id_Prot de la 1ere requete selon l'organisme.Par contre maintenant pour la 2eme requete, pour chaque organisme, cela m'affiche tous les id et non pas que les id par organisme.
    Je sens le bout mais il y a une subtilite qui m'echappe

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    J'ai reussi!

    Voila la solution pour ceux qui auraient la meme difficulte que moi:

    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
        foreach($res as $k=>$a) {
        printf ('<h1>%s</h1>','<center><div style="color:#FF0000;">'.$k.'</center></div>');
        echo '<ul>';
        echo '<h2><center><div style="color:#0000FF;">Occurrences Connues:</h2></center></div>';
     
        foreach ($a as $v) {
        $id=substr($v,0,-1);
     
        printf ('<li>%s</li>',"<center><"."<a href=\"http://www.lirmm.fr/~terrapon/coddDB/$id.html\">$id</a>"."></center>");
        }
        echo '</ul>';
        echo '<h2><center><div style="color:#0000FF;">Nouvelles Occurrences:</h2></center></div>';
        if (array_key_exists($k, $res1)) { 
         	foreach ($res1 as $k1 => $a1) {
        	foreach ($a1 as $v1) {
    	if ($k1==$k) 					
            {$id1=substr($v1,0,-1);
    	printf('<li>%s</li>', "<center><"."<a href=\"http://www.lirmm.fr/~terrapon/coddDB/".$id1.".html\" >$id1</a>"."></center></div>");}
     
            }   
        }
     }
     else echo "<center>Aucune Occurrence pour cet organisme</center>";
     
     
    }
    A bientot

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/01/2013, 13h16
  2. Réponses: 8
    Dernier message: 18/04/2010, 03h40
  3. [MySQL] fusionner deux tableaux par une variable commune pour faire un tuple unique
    Par mickeynad dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 11/04/2010, 10h28
  4. Probleme avec ODBC pour la V8.
    Par chad33 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 04/03/2005, 23h57
  5. Réponses: 3
    Dernier message: 24/02/2005, 15h48

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