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] Tri de tableau à 2 dimensions


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 49
    Points : 59
    Points
    59
    Par défaut [Tableaux] Tri de tableau à 2 dimensions
    Bonjour,

    Je modifie un site qu'un ancien collègue a réalisé, j'ai commencé dans le php/mysql réellement il y a 3 jours, et je bloque.

    En fait, j'extraie de la MIB de plusieurs switchs les adresses MAC et les ports correspondants que je stocke dans des tableaux.

    A partir des adresses MAC relevées, et suivant le port correspondant, je fait une requête dans une table mysql qui me donne toutes les infos comme le nom du poste, son adresse IP, le modèle, la marque, l'imprimante qui y est connectée...

    Déjà là, les adresses MAC arrivent dans l'ordre croissant, et les n° des ports dans le désordre... J'ai "rusé" en me servant du n° de port comme index dans un 3ème tableau ($tab_mac[$num_switch][$num_port] = $mac_address.

    Mais le problème n'est pas là!!!

    après pas mal d'heures de recherche et d'arrachage de cheveux, je n'arrive pas à trier un simple tableau à 2 dimensions selon 2 paramètres précis.
    En effet, je souhaite classer d'abord par VLAN ( ou $tab_desordre[4][$cpt] ) de façon croissante, et ensuite que tous les NOM_POSTE ( ou $tab_desordre[0][$cpt] ) apparraissent dans l'ordre alphabétique

    Jusqu'à présent, toutes les fonctions que j'ai essayé classaient effectivement ces 2 colonnes, mais sans influer sur les autres $tab_desordre[x][$cpt] et les laissaient telles que...

    Petite précision, vlan est obtenu par un snmpget sur chaque port où une adresse MAC existe.

    Voici mon tableau, $cpt étant un compteur allant de 0 à 300.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $tab[0][$cpt] = $nom_poste;
    $tab[1][$cpt] = $ip_poste;
    $tab[2][$cpt] = $num_switch;
    $tab[3][$cpt] = $num_port;
    $tab[4][$cpt] = $vlan;
    $tab[5][$cpt] = $tab_mac[$num_switch][$num_port];
    $tab[6][$cpt] = $marque_po;
    $tab[7][$cpt] = $modele_po;
    $tab[8][$cpt] = $imp_poste;
    $tab[9][$cpt] = $port_imp;
    $tab[10][$cpt] = $palier;
    $tab[11][$cpt] = substr($nom_poste, 11, 4);
    $tab[12][$cpt] = substr($nom_poste, 0, 11);
    Par exemple (je limite le nombre de colonnes à 4), si j'ai :

    ---------$tab[0][$cpt]---$tab[4][$cpt]--$tab[6][$cpt]---$tab[7][$cpt]
    ---------nom_poste------vlan-----------marque---------modèle
    $cpt=0--P008------------11-------------Dell------------Optiplex 170L
    $cpt=1--P016------------10-------------Acer-----------Veriton 3900 Pro
    $cpt=2--P005------------10 ------------Dell------------Optiplex 210L
    $cpt=3--P002------------11-------------Nec------------Powermate ML1

    Avec les fonctions que j'ai trouvé et utilisé, seules les colonnes 0 et 4 étaient triées, et les reste intouché... Ca donnait ça:

    ---------$tab[0][$cpt]---$tab[4][$cpt]---$tab[6][$cpt]---$tab[7][$cpt]
    ---------nom_poste------vlan------------marque---------modèle
    $cpt=0--P002------------10--------------Dell------------Optiplex 170L
    $cpt=1--P005------------10--------------Acer-----------Veriton 3900 Pro
    $cpt=2--P008------------11--------------Dell------------Optiplex 210L
    $cpt=3--P016------------11--------------Nec------------Powermate ML1

    Dans ce cas, plus rien ne correspond à rien, j'ai une autre fonction qui arrive à garder une correspondance entre nom_poste et vlan, mais le reste...

    Et voilà le résultat que je recherche
    ---------$tab[0][$cpt]---$tab[4][$cpt]---$tab[6][$cpt]---$tab[7][$cpt]
    ---------nom_poste------vlan------------marque---------modèle
    $cpt=0--P005------------10--------------Dell------------Optiplex 210L
    $cpt=1--P016------------10--------------Acer-----------Veriton 3900 Pro
    $cpt=2--P002------------11--------------Nec------------Powermate ML1
    $cpt=3--P008------------11--------------Dell------------Optiplex 170L

    Si une âme charitable veut bien se donner la peine de me donner une petite explication!!

    Merci pour tout

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    déjà inverse les indices du tableau comme ça par exemple
    à partir de là tu auras dans "$tab" une liste de tableaux que tu pourras trier avec la fonction http://php.net/usort

  3. #3
    Membre actif Avatar de juliens9
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 192
    Points : 237
    Points
    237
    Par défaut
    Si ton tableau est a 2 dimensions il te faut 2 boucle pour pouvoir le classer non ?

    Car la tu as l'air de faire qu'un seul traitement, essayer aussi d'organiser tes données dans la requete sql, tu peux rajouter plusieurs parametres dans ton order by, et aussi utiliser la fonction group by pour te permettre de regrouper certaines données.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 49
    Points : 59
    Points
    59
    Par défaut
    Merci pour vos réponses, mais en fait, je m'en suis sorti en créant une table dans laquelle je transfère les données, et que j'efface complètement au besoin!!!

    Je fais le tri au moment de l'appel des données, avec un classique ORDER BY...

    De plus, ça m'a divisé par 10 le temps de traitement de la fonction!!! Donc c'est tout bénef!!

    Merci encore

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

Discussions similaires

  1. [Tableaux] Problème de tri de tableau à 2 dimensions
    Par lebigboss dans le forum Langage
    Réponses: 1
    Dernier message: 09/05/2007, 16h34
  2. [Tableaux] Problème tri de tableau à deux dimensions
    Par squall62 dans le forum Langage
    Réponses: 21
    Dernier message: 24/05/2006, 18h18
  3. [Tableaux] Tri de tableau
    Par BenoitDenis dans le forum Langage
    Réponses: 16
    Dernier message: 27/02/2006, 15h32
  4. [Tableaux] tri de tableau deux dimensions
    Par oursquetaire dans le forum Langage
    Réponses: 8
    Dernier message: 27/12/2005, 14h27
  5. [Tableaux] tri de tableau
    Par rdams dans le forum Langage
    Réponses: 19
    Dernier message: 08/11/2005, 13h46

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