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] Trier tableau en fction d'une valeur associée à un id en clé


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Points : 47
    Points
    47
    Par défaut [Tableaux] Trier tableau en fction d'une valeur associée à un id en clé
    Bonjour à tous,

    Je possède un tableau associatif qui se présente ainsi :

    $tab[$id_machine][$id_employe][$date]['heures_tranche1']
    $tab[$id_machine][$id_employe][$date]['heures_tranche2']

    etc..

    Actuellement lorsque je parcours mon tableau (avec foreach), j'affiche les machines à partir de la clé $id_machine.

    Le problème est que l'affichage est aléatoire puisque l'affichage se fait pour la machine ayant un identifiant 24 puis 12, 9, ...

    Je voudrais donc trier le tableau précédent en fonction du nom de la machine associée à la clé $id_machine. Je possède un second tableau contenant le nom des machines en fonction de son identifiant. Il est de cette forme :

    $tab_noms_machines[$id_machine]['nom_machine']

    Exemple :

    Si pour les valeurs de $id_machine dans $tab_noms_machines le nom correspondant est :
    24 => Machine C
    12 => Machine A
    9 => Machine B

    Je veux qu'au final $tab soit trié ansi :

    $tab[12][][]...
    $tab[9][][]...
    $tab[24][][]...

    Pour pouvoir aficher MachineA puis Machine et Machine C.

    J'ai regardé du côté de usort mais je ne vois pas comment effectuer la fonction de comparaison. D'ailleurs peut-on passer plus que 2 variables en paramètre pour la fonction de comparaison ? (le tableau contenant le nom des machines par exemple)

    Pouvez-vous m'aider ?

    Je vous remercie par avance.

  2. #2
    Membre éprouvé Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Points : 1 009
    Points
    1 009
    Par défaut
    Remplaces les clés par les noms des machines dans un troisième tableaux si les noms des machines sont uniques, puis utilises la fonction sort().

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    À vue de nez, tu pourrais avoir besoin d'une fonction de tri avec callback.
    Maintenant, ta structure de tableau me paraît étrange : pourquoi avoir deux tableaux différents mais utilisant les mêmes indices ? Cela me paraît redondant.

    Proposition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tab[$id_machine]['nom_machine']
    $tab[$id_machine]['employes'][$id_employe][$date]['heures_tranche1']
    $tab[$id_machine]['employes'][$id_employe][$date]['heures_tranche2']
    Ou, mieux, tu utilises le nom de la machine comme clé, ce sera plus simple pour les trier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tab[$nom_machine]['id'] = $id_machine;
    $tab[$nom_machine]['employes'][$id_employe][$date]['heures_tranche1']
    $tab[$nom_machine]['employes'][$id_employe][$date]['heures_tranche2']

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Points : 47
    Points
    47
    Par défaut
    J'utilise en fait deux tableaux car le tableau contenant le nom des machines est le résultat d'une fonction que j'utilise ailleurs.

    Comme me conseille macbook, je recopie mes élements pour mettre en clé le nom de la machine dans un nouveau tableau et cela fonctionne. Je trie le tableau avec sort mais ça n'a pas l'air de fonctionner !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Points : 47
    Points
    47
    Par défaut
    Ca fonctionne, en fait j'utilise ksort pour trier à partir des noms des machines en clé.

    Merci à vous !

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Trois tableaux qui contiennent la même chose :/

  7. #7
    Membre averti Avatar de XtofRoland
    Profil pro
    Inscrit en
    Août 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 357
    Points : 392
    Points
    392
    Par défaut
    il y a une fonction php array_key qui te ramene les clef de ton tableau.
    tu les tries et tu accedes a ton tableau par clefs.

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

Discussions similaires

  1. [Tableaux] Trier tableau multidimensionnel
    Par M@t2802 dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2007, 08h34
  2. Réponses: 5
    Dernier message: 20/03/2007, 01h56
  3. [Tableaux] Trier tableau deux dimensions
    Par dondano dans le forum Langage
    Réponses: 1
    Dernier message: 25/10/2006, 20h02
  4. Réponses: 1
    Dernier message: 22/09/2006, 13h05
  5. [Tableau Composite] Comment insérer une valeur ?
    Par Titouf dans le forum Oracle
    Réponses: 1
    Dernier message: 26/01/2006, 17h15

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