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] Concaténer 2 tableaux qui ont les mêmes clés


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 45
    Points : 32
    Points
    32
    Par défaut [Tableaux] Concaténer 2 tableaux qui ont les mêmes clés
    Bonjour,

    J'aimerais concatener deux tableaux...
    Je vous explique mon problème:
    J'ai 2 tables dans ma bd:
    une-> Ville_Belgique(id, nom, etat, contact, date_creation)
    une autre-> Ville_France(id, nom, etat, contact, date_creation)

    j'ai 2 requetes qui retourne le contenu des tables

    et j'aimerais ajouter le resultat de la deuxieme requete à celui de la premiere (pas de jointures ou autre...)
    juste concatener les 2 resultats pour afficher tout dans un seul tableau

    Y-a-t'il une fonction qui permet cela? (qui n'ecrasera pas les resultats de ma première requete?) j'ai trouvé array_merge mais j'ai lu que ça ecrasait les résultat du 1er tableau si c'est les mêmes clés :s


    Merci d'avance de votre aide

  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
    Bonjour,

    array_merge() fonctionnera

    Si les tableaux ont des clés en commun, la dernière valeur rencontrée écrasera l'ancienne. Pour les valeurs numériques, cela n'arrive pas, car, alors, les valeurs sont ajoutées en fin de tableau.

  3. #3
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Et pourquoi pas avec une requête UNION ?

  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
    Apparement pour pouvoir utiliser le resultat de chaque requete isolement egalement.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Apparement pour pouvoir utiliser le resultat de chaque requete isolement egalement.
    oui exactement


    j'ai utiliser array_merge, mais ça pose probleme...

    exemple:
    dans ma table: Ville_Belgique(id, nom, etat, contact, date_creation)
    j'ai les champs id, nom, etat et date_creation qui sont complétés

    ensuite dans mon autre table, j'ai les champs id, nom et date_creation qui sont complétés

    Après avoir fait un array_merge,
    mon tableau principal contient bien tout les enregistrements!
    Mais la valeur du champs états du dernier enregistrement de la première table à été copié pour tout les enregistrements de la 2ème table :s


    Je ne comprends pas pourquoi :s
    Si quelqu'un aurait une solution pour moi?


    ca m'aiderait car je ne suis pas (encore) spécialiste, merci d'avance

  6. #6
    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 pourrais nous montrer un print_r() de chacun des tableaux ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    après ma requete, j'obtient

    table 1:Ville_Belgique(id, nom, etat, contact, date_creation)

    '1', 'tontelange', '3', ' ', '1980-11-22'

    table 2: Ville_France(id, nom, etat, contact, date_creation)

    '1', 'Marseille', ' ', ' ', '1903-06-17'
    '2', 'Paris', ' ', ' ', '1913-02-17'
    '3', 'Pau', ' ', ' ', '1909-10-17'
    ect ...


    une fois que j'ai fais le array_merge

    j'obtiens:
    'tontelange', '3', ' ', '1980-11-22'
    'Marseille', '3', ' ', '1903-06-17'
    'Paris', '3 ', ' ', '1913-02-17'
    'Pau', '3 ', ' ', '1909-10-17'

  8. #8
    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 prepares le rattachement de la Belgique a la France ?

    Pourrais-tu nous montrer le code avec les requetes et le merge ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    bonjour,

    j'ai essayer de retravailler dessus hier soir
    en faite dans ma 1ere table j'ai un champs en plus que dans la deuxieme...

    table: Ville_Belgique(id, nom, etat, region, contact, date_creation)
    table: Ville_France(id, nom, etat, contact, date_creation)

    je fait mes requetes:
    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
     
    class VilleBelgique extends Zend_Db_Table_Abstract
    {
    		protected $_name = 'Ville_belgique';
     
                   public function _getVilleBelgique()
                   {
                           $select = $this->_db->select()
    		                          ->from (array('v_b' => $this->_name), array('v_b.nom', 'v_b.etat', 'v_b.region', 'v_b.contact', 'v_b.date_creation'))				
     
                                        ->query();
     
                                       return $select->fetchAll();
                     } 
    }
    j'ai une requete semblable pour afficher les champs de la deuxieme table

    puis dans mon controleur, je crée des instances de chaque modèle, j'appelle les fonctions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $arrayVilleBelgique = $this->villeBelgique->_getVilleBelgique();
    $arrayVilleFrance = $this->villeFrance->_getVilleFrance();
    $this->view->list = array_merge($arrayVilleBelgique + $arrayVilleFrance );
    ensuite dans ma vue, je fais une boucle foreach pour afficher la 'list'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($this->list as $id => $element):
    le probleme, c'est que j'ai 5 colonnes et la colonne région devrait rester vide pour les villes de France!! Mais elle prend la valeur du dernier enregistrement de la table VilleBelgique...


    Quelqu'un pourrait-il me dire comment corriger cela?


    merci d'avance

  10. #10
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Il manque encore un bout de code important : dans ta boucle foreach, comment fais-tu l'affichage des données ?

  11. #11
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_merge($arrayVilleBelgique + $arrayVilleFrance );
    Ca me paraît bizarre, c'est pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_merge($arrayVilleBelgique, $arrayVilleFrance );
    ?

  12. #12
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par guidav Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_merge($arrayVilleBelgique + $arrayVilleFrance );
    Ca me paraît bizarre, c'est pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_merge($arrayVilleBelgique, $arrayVilleFrance );
    ?
    Si, si, bien vu !

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    non que je mette + ou , ça ne change rien

    voilà le code où j'affiche:
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    <table id="table_list_head" cellspacing="0" cellpadding="0" style="width: 100%;">
    <tbody>
    <tr>
     
    	<td style="width: 9%;">
    	nom&nbsp;
    	</td>
    	<td style="width: 9%;">
    	etat&nbsp;
    	</td>
    	<td style="width: 9%;">
    	region&nbsp;
    	</td>
    	<td style="width: 9%;">
    	contact&nbsp;
    	</td>
           <td style="width: 9%;">
    	date&nbsp;
    	</td>
    	</tr>
    </tbody>
    </table>
     
    <table id="table_list_body" cellspacing="0" cellpadding="0" style="width: 100%";>
    <tbody>
    <?php if ( count($this->list)==0 ): ?>
    <tr>
    <td colspan="3">rien a afficher</td>
    </tr>		
    <?php endif; ?>
     
    <?php
    $date="";
    $nom="";
    $etat="";
    $region=""; 
    $contact="";
     
    foreach ($this->list as $id => $equipement):
    if(isset($equipement['nom']))	
    $nom = $this->$equipement['nom'];
    if(isset($equipement['etat']))
    $etat = $this->$equipement['etat'];
    if(isset($equipement['region']))			
    $region = $this->$equipement['region '];
    if(isset($equipement['contact']))	
    $contact= $this->$equipement['contact'];
    if(isset($equipement['date']))	
    $date = $this->$equipement['date'];
    ?>
     
    <tr>
    <td >
    <table cellspacing="0" cellpadding="0" style="width: 100%; padding: 0px; margin: 0px">
    <tbody>
    <tr>
    <td style="width: 9%;">
    <?php echo $nom; ?>
    </td>
    <td style="width:9%;">										
    <?php echo $etat; ?>											
    </td>
    <td style="width: 9%;">
    <?php echo $region; ?>
    </td>
    <td  style="width: 9%;">
    <?php echo $contact; ?>
    </td>
    <td style="width: 9%;">
    <?php echo $date;?>										</td>

  14. #14
    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
    Quand tu arrives a ta deuxieme partie du tableau $equipement['etat'] n'est plus "set" donc tu ne lui donnes plus de valeur, donc il va afficher la derniere valeur que tu lui as donné.

    Beaucoupl plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    echo '<table cellspacing="0" cellpadding="0" style="width: 100%; padding: 0px; margin: 0px">';
    foreach ($this->list as $equipement) {
      echo '<tr>
               <td style="width: 9%;">'  . $equipement['nom'] . '</td>
               <td style="width: 9%;">'  . $equipement['etat'] . '</td>
               <td style="width: 9%;">'  . $equipement['region'] . '</td>
               <td style="width: 9%;">'  . $equipement['contact'] . '</td>
               <td style="width: 9%;">'  . $equipement['date'] . '</td>
             </tr>';
    }
    echo '</table>';
    Petit conseil de debugage : utiliser var_dump(); et print_r();
    En faisant un print_r de ton tableau tu aurais vu que le array_merge donnait le resultat attendu ; le probleme se trouvait donc dans l'affichage.

  15. #15
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    C'est bien du à ce code.

    Quand tu fais (corrigé par rapport au code que tu donnes : il y avait il me semble un $this-> en trop, et un espace en trop après region) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(isset($equipement['region']))			
    $region = $equipement['region'];
    Tu affectes à $region la valeur de $equipement['region'] uniquement si elle existe. Dans le cas contraire, $region conserve son ancienne valeur... D'où l'affichage de la dernière région de Belgique pour les communes françaises...

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    ok merci comme ça cela fonctionne

    mais le problème, il me lance un
    Notice: Undefined index: region in /usr/local/consulter.phtml on line 44
    j'avais justement mit les isset pour eviter cela ...

    y-a-t'il une autre solution? (la seule que j'ai trouvé était de vérifier si la donnée existe mais comme vous dites, ça fou mon affichage en l'air) :s :s

  17. #17
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Oui, il y a une solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(isset($equipement['region']))			
    {
        $region = $equipement['region'];
    }
    else
    {
        $region = "";
    }

  18. #18
    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
    mais non tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @$region = $equipement['region'];




    je rigole ...

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 45
    Points : 32
    Points
    32
    Par défaut trier le tableau resultat
    j'ai encore un petit probleme avec mon tableau

    ils sont tout les 2 triés par ordre croissant selon les dates

    une fois que je les concatène, comment puis je trier selon les dates le tableau resultat?

    j'ai vu dans le manuel la fonction array_multitsort() mais je vois pas cmt l'appliquer...


    j'espere que quelqu'un voit ce que je veux faire,
    merci à d'avance

  20. #20
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/06/2011, 17h41
  2. [XL-2003] supprimer des lignes qui ont les même valeurs
    Par Neptune64 dans le forum Excel
    Réponses: 1
    Dernier message: 09/08/2009, 00h30
  3. Réponses: 2
    Dernier message: 14/08/2007, 16h18
  4. Réponses: 3
    Dernier message: 20/01/2007, 19h09
  5. supprimer les fichiers qui ont des mêmes noms
    Par manaboko dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2006, 09h09

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