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 :

Remplir un tableau par colonne


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Remplir un tableau par colonne
    Bonjour

    Comment générer un tableau html à pertir de plusieurs requètes SQL.

    Exemple :
    Avec une table (nom, type)
    Félix, chat
    Rintintin, chien
    Fritz, chat
    Tornado, cheval
    Lassie, chien
    Minou, chat

    Comment obtenir un tableau

    Chat Chien Cheval
    Félix Rintintin Tornado
    Fritz Lassie
    Minou

    Pour la partie SQL, je devrais y arriver tout seul...
    Merci 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
    Tu lis tes enregistrements et tu les classes dans un tableau PHP
    $tableau[$race][] = $nom

    Tu n'auras plus qu'a construire ton tableau HTML en parcourant.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu lis tes enregistrements et tu les classes dans un tableau PHP
    $tableau[$race][] = $nom

    Tu n'auras plus qu'a construire ton tableau HTML en parcourant.
    Je récupère bien les données des trois requètes initiales (1 pour le chats, 1 pour les chiens...).
    Je n'ai pas réussi à créer le tableau HTML, les différentes données se situant les une au dessous des autres...


    J'ai donc utilisé <br/> pour mettre chacun des animaux dans la même cellule (ça évite qu'ils se battent entre eux, en plus )

  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
    Je récupère bien les données des trois requètes initiales (1 pour le chats, 1 pour les chiens...).
    Justement ce n'est pas ça qu'il faut faire.
    Il suffit d'une seul requête et de ranger le resultat.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Justement ce n'est pas ça qu'il faut faire.
    Il suffit d'une seul requête et de ranger le resultat.
    Bon alors là, j'ai des graves lacunes...
    Ce que tu me dis, c'est :
    1. Je récupère le nom et la race de l'animal en sql.
    2. Je stocke ça dans un array php.
    3. Je mets ça dans un tableau html.

    Le 1 et le 2, je vois. Mais pour le 3 , j'ai du mal.
    merci de ta patience

  6. #6
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Il faut que tu passes par un mysql_fetch_array par exemple

  7. #7
    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
    Je te propose :
    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
    while ($row = mysql_fetch_assoc($result)) {
      // je recolte la liste des especes au passage, mais ca pourrait etre fait dans une requete séparée
      if (!in_array($row['type'], $lstEspec) { $lstEspece[] = $row['type']; }
     
       $tableau[($row['type']][] = $row['nom'];
    }
     
     
    $i=0;
    echo '<table>';
    foreach ($tableau as $values) {
       echo '<tr>';
       foreach ($lstEspece as $espece) {
           $affichage = isset($values[$espece][$i]) ? $values[$espece][$i] : "&nbsp;"
           echo '<td>' . $affichage . '</td>';
       }
       echo '</tr>';
       $i++;
    }
    echo '</table>';

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci de ta solution.
    J'ai un souci lors de l'appel de in_array($row['type'], $lstEspec)
    Il considère que le second argument n'est pas du bon type...
    Pourtant c'est bien un array, non ?

    Message :
    Warning: in_array() [function.in-array]: Wrong datatype for second argument

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Il doit falloir définir la variable avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $lstEspec = array();
    while ($row = mysql_fetch_assoc($result)) {
      // je recolte la liste des especes au passage, mais ca pourrait etre fait dans une requete séparée
      if (!in_array($row['type'], $lstEspec) { $lstEspece[] = $row['type']; }
     
       $tableau[($row['type']][] = $row['nom'];
    }

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Celira Voir le message
    Il doit falloir définir la variable avant :
    Ah ben tiens !
    Je croyais que les variables n'avaient pas besoin d'être définies en php...

    Non que je doute de ta réponse (que je crois correcte), mais ça m'téonne !

  11. #11
    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
    C'est bien le cas ; tu n'as qu'une erreur de type WARNING.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    OK.
    Je continue

    Dans la ligne :
    $affichage = isset($values[$espece][$i]) ? $values[$espece][$i] : "&nbsp;"

    Que veut dire le «*?*» ?
    Je ne trouve pas de référence le concernant.

  13. #13
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $affichage = isset($values[$espece][$i]) ? $values[$espece][$i] : "&nbsp;";
    //équivaut à
    if(isset($values[$espece][$i]))
    {
      $affichage = $values[$espece][$i];
    }
    else
    {
      $affichage = "&nbsp;";
    }
    Opérateur ternaire

    ça fait partie des choses dont tu ne trouves la doc qu'en connaissant le nom, sachant que pour connaitre le nom, il faut déjà avoir lu la doc une fois...

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Celira Voir le message
    Opérateur ternaire
    ça fait partie des choses dont tu ne trouves la doc qu'en connaissant le nom, sachant que pour connaitre le nom, il faut déjà avoir lu la doc une fois...
    Les docs en sont bourrées...

    Donc pour ça, j'ai compris mais quant à l'évaluation de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $affichage = (isset($values[$espece][$i])) ? $values[$espece][$i] : "&nbsp;";
    ça ramène toujours faux... et donc juste un &nbsp; alors que $lstEspece est bien alimenté

  15. #15
    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
    Mon code était effectivement bidon.

    Deuxieme tentative :

    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
     
    $nbre_lignes = 0;
     $lstEspec = array();
    while ($row = mysql_fetch_assoc($result)) {
      // je recolte la liste des especes au passage, mais ca pourrait etre fait dans une requete séparée
      if (!in_array($row['type'], $lstEspec) { $lstEspece[] = $row['type']; }
     
       $tableau[($row['type']][] = $row['nom'];
     
       // je regarde combien de lignes j'aurais au maximum
       $nbre_lignes = max($nbre_lignes, count($tableau[($row['type']]));
    }
     
    for ($i = 0; $i < $nbre_lignes - 1; $i++) {
       echo '</tr>';
         foreach ($lstEspece as $espece) {
               $affichage = isset($tableau[$espece][$i]) ? $tableau[$espece][$i] : "&nbsp;"
           echo '<td>' . $affichage . '</td>';
       }
       echo '</tr>';
    }

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Mon code était effectivement bidon.

    Deuxieme tentative :
    Bonjour,

    Merci. En effet ça marche mieux (à quelques parenthèses restées ouvertes près...

    En revanche je me retrouve avec autant de cellules par lignes du tableau que de lignes dans la table en entrée.
    Je n'ai pas trouvé la fonction php pour avoir les valeurs uniques (array_unique ne marche que sur les tableaux mono dimensionnels.)
    Ça existe ?

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Cvv_cavv Voir le message
    Bonjour,

    En revanche je me retrouve avec autant de cellules par lignes du tableau que de lignes dans la table en entrée.
    Toutes mes excuses, j'avais fait une erreur.
    La solution est impec.
    Merci encore.
    A bientôt sans doute pour de nouvelles aventures !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/05/2011, 23h45
  2. remplir un tableau par des nombre aléatoires
    Par logo98 dans le forum Débuter
    Réponses: 7
    Dernier message: 07/03/2009, 00h22
  3. remplir un tableau par requete
    Par temperature dans le forum Requêtes
    Réponses: 6
    Dernier message: 14/04/2006, 16h45
  4. Remplir un tableau par une référence externe
    Par vodevil dans le forum Langage
    Réponses: 1
    Dernier message: 26/03/2006, 17h00
  5. [MySQL] Remplir un tableau par requêtes sql
    Par Melekitto dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/02/2006, 18h30

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