Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/06/2008, 02h51   #1
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 49
Points : 32
Points : 32
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 :
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
heavenvibes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2008, 09h03   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2008, 20h31   #3
Membre confirmé
 
Avatar de juliens9
 
Directeur technique
Inscription : mars 2007
Messages : 192
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : mars 2007
Messages : 192
Points : 220
Points : 220
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.
juliens9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2008, 02h53   #4
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 49
Points : 32
Points : 32
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
heavenvibes est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h02.


 
 
 
 
Partenaires

Hébergement Web