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 :

Trier un tableau multidimensionnel


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 83
    Points
    83
    Par défaut Trier un tableau multidimensionnel
    J'ai deux résultats de requête PHP que je voudrais insérer dans un tableau multidimensionnel et une fois ce dernier trié, le parcourir pour être en mesure de le placer dans un SELECT en HTML.

    Le tableau s'appelle MEMBRE et pour chaque membre, je garde son ID, le prénom et le nom.

    En parcourant mon résultat de ma requête, je désire ajouter les informations dans le tableau et si possible trier le tableau par nom de famille avant de la parcourir et de faire un SELECT avec le tableau tout entier.

    Si je pouvais avoir un départ, car je ne me souviens plus comment faire, tellement ça fait longtemps.

    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    J'ai deux résultats de requête PHP
    Les données viennent d'une base de données ?
    Tu peux trier le résultat avec un ORDER BY.

    Si je pouvais avoir un départ, car je ne me souviens plus comment faire, tellement ça fait longtemps.
    Il faut que tu nous donnes les données que tu as en entrée et ce que tu souhaites en sortie.
    Avec du code exécutable c'est encore mieux.

    Sinon pour trier en PHP pur il y a usort() :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Trier $data selon la clef "last_name" des éléments :
    usort($data, fn ($a, $b) => $a['last_name'] <=> $b['last_name']);

    https://www.php.net/usort
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 83
    Points
    83
    Par défaut
    Bonjour Seb,

    Voici les deux requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $req_code = "SELECT c.*, m.nom, m.prenom, m.ID_Membre, m.honoraire
    				FROM codepromo c
    				INNER JOIN membres m
    				ON c.ID_Membre = m.ID_Membre
    				WHERE c.ID_Code = '" . $ID_Code . "'";
    Et la seconde

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $req_util = "SELECT ID_Membre, nom, prenom 
    				FROM membres
    				WHERE ID_Code = '" . $ID_Code . "'
    				ORDER BY nom";
    Je suis en mesure de parcourir le résultat de mes deux requêtes, cependant, c'est la création de mon tableau.

    Ma première requête, je veux prendre le ID du membre, le nom et le prénom, donc supposons que je fais quelque chose de la sorte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row_code = mysqli_fetch_assoc($dem_code);
    Donc j'aurais $row_code['ID_Membre'], $row_code['nom'], $row_code['prenom'] sur chaque ligne de cette requête.

    Ensuite pour la seconde, même chose, sauf que le nom de la variable sera différent pour le mysqli_fetch_assoc()

    Un tableau nommé $membre que je vais déclarer array(), mais c'est rendu la que je ne vois pas comment faire pour insérer chaque ligne dans ce tableau.

    Et faire le tri par la suite.

    Est-ce qu'avec un peu plus d'information, tu arrives à comprendre ce que je veux faire ?

    Merci

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Il s'agit de 2 requêtes SQL (et pas PHP)

    Tu devrais pouvoir obtenir directement ce que tu veux grâce à SQL.

    Donne un échantillon de résultat de la requête 1, de la requête 2, et du résultat que tu souhaites obtenir à partir de ces 2 échantillons.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 83
    Points
    83
    Par défaut
    Désolé pour le délai de réponse.

    En fait, ma première requête consiste à retrouver tous celles et ceux qui ont un abonnement avec un CODE fourni par un employeur.

    De la table MEMBRE, je prends seulement le nom, le prénom, le ID_Membre avec comme condition l'identifiant du CODE.

    Exemple, j'aurais tous les membres qui ont utilisé le CODE avec l'identifiant de ce dernier, ici, on suppose que l'identifiant du CODE est 16, mais il peut varier.

    Mais j'ai aussi de besoin des informations de la personne en charge du CODE chez l'employeur. Toutes ses informations sont dans une base de données à part.

    Je dois joindre son nom, prénom selon son ID_Membre a cette requête. La table se nomme codepromo.

    Si la conversation doit être déplacée dans un autre FORUM, juste à le faire.

    Merci

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Mais j'ai aussi de besoin des informations de la personne en charge du CODE chez l'employeur. Toutes ses informations sont dans une base de données à part.
    Tu donnes les informations au compte-goutte
    Si cette autre base de données est sur le même serveur alors tu peux aussi y accéder en préfixant les tables avec le nom des bases.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ...
    FROM bdd1.table AS t1
    INNER JOIN bdd2.table AS t2 ON t1.id = t2.id
    ...
    ORDER BY ...
    Pour résumer :
    Soit tu fais une requête unique et le tri avec un ORDER BY
    Soit tu agrèges le résultat des requêtes dans un tableau unique que tu tries avec usort()
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 83
    Points
    83
    Par défaut
    Bonjour Seb,

    Désolé de tout te donner au compte goutte, je vais être plus précis.

    Dans ma table MEMBRES j'ai besoin du nom et du prenom ainsi que de son ID selon le ID_Code (Identifiant unique du CODE) et dans la table CODE, ce que je désire c'est d'avoir le nom et le prenom du membre selon son ID_Membre, toujours correspondant au ID_CODE.

    Donc ma table CODE

    ID_CODE
    CODE
    ID_Membre
    Maximum de personne qui peuvent utiliser le code
    Nbre d'utilisaiton

    Et la table MEMBRE

    ID_Membre
    Nom
    Prenom
    ID_Code si appliquable
    et plusieurs autres informations

    Je ne sais pas si je suis plus clair ? Dès le départ je voulais tout mettre dans un tableau et le trier comme tu me le suggère c'était le premier sujet de la discussion.

    Sylvain

  8. #8
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Table MEMBRE
    ------------
    ID_Membre
    Nom
    Prenom
    ID_Code si appliquable
    
    Table CODE
    ----------
    ID_CODE
    CODE
    ID_Membre
    Maximum de personne qui peuvent utiliser le code
    Nbre d'utilisaiton
    Dans ma table MEMBRES j'ai besoin du nom et du prenom ainsi que de son ID selon le ID_Code (Identifiant unique du CODE) et dans la table CODE, ce que je désire c'est d'avoir le nom et le prenom du membre selon son ID_Membre, toujours correspondant au ID_CODE.
    Donne un exemple avec quelques lignes de MEMBRE, quelques lignes de CODE et le résultat attendu selon ces quelques lignes stp.
    Tu parlais de différentes bases. Tu n'en parles plus. Finalement tu as 2 tables dans la même base ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  9. #9
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 83
    Points
    83
    Par défaut
    Bonjour SEB,

    Les tables sont dans la même base de données.

    Voici mes deux requêtes, je rappelle qu'au départ, je désirais insérer les deux résultats dans un tableau multidimensionnel et le trier par la suite, tant mieux si nous arrivons à le faire dans une seule et unique requête.

    Les membres selon le ID_CODE dans la table membres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req_code = "SELECT nom, prenom, ID_Membre FROM membres WHERE ID_CODE = '" . $ID_CODE . "' ORDER BY nom";
    Ensuite le membre qui gère le CODE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $req_proprio = "SELECT c.ID_Membre, m.nom, m.prenom
    					FROM codepromo c
    					INNER JOIN membres m
    					ON c.ID_Membre = m.ID_Membre
    					WHERE c.ID_CODE = '" . $ID_Code . "'";
    La première requête me donnera plusieurs lignes, car certain code sont valides jusqu'à 200 membres.

    La deuxième requête, je n'ai qu'une seule ligne parce qu'une seule personne est responsable du CODE et n'est pas nécessairement inclus dans les membres. Si la personne est présente dans les deux places, je vais m'arranger pour le faire disparaitre avec un DISTINCT dans ma requête.

    Sylvain

  10. #10
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Le résultat attendu n'est pas clair.

    C'est pour cela que je te redemandes une nouvelle fois un échantillon de quelques lignes des tables de MEMBRE et de CODE, et du résultat que tu souhaiterais en obtenir.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  11. #11
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 83
    Points
    83
    Par défaut
    Le tout va aller dans un menu déroulant, si le besoin est de changer la personne en charge du CODE.

    Voici un peu de résultat tel que demandé

    Personne responsable

    Monique Croteau

    Personne utilisant le CODE

    Sarah Archambault

    Genevieve Arsenault

    Simla Baboolall

    Julie Béchard

    Marie-Eve Bédard

    Sophianne Bélanger-Brault

    Vicky Bérard-Maurice

    Isabelle Bérubé

    Isabelle Beaudoin

    Sylvie Beaudoin

    Koralie Beaudoin Drasse

    Et ensuite de suite..... j'avais au dela de 150 lignes, donc je n'ai pas tout copié.

    La personne responsable n'est pas dans les membres utilisant le CODE, donc si possible faire une seule et unique requête ou encore mettre les deux résultats dans un tableau multidimensionnel et le trier par la suite.

    Sylvain

Discussions similaires

  1. Réponses: 15
    Dernier message: 18/05/2012, 13h15
  2. Trier un tableau multidimensionnel
    Par malabarbe dans le forum Langage
    Réponses: 9
    Dernier message: 04/03/2010, 20h28
  3. [PHP 5.2] Trier un tableau multidimensionnel ?
    Par nazoreen dans le forum Langage
    Réponses: 4
    Dernier message: 04/03/2009, 15h59
  4. [Tableaux] comment trier un tableau multidimensionnel
    Par tibotibo69 dans le forum Langage
    Réponses: 2
    Dernier message: 26/02/2008, 17h04
  5. [Tableaux] trier un tableau multidimensionnel
    Par chris801 dans le forum Langage
    Réponses: 2
    Dernier message: 08/06/2007, 08h43

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