[RESOLU] Tri Tableau Multidimensionnel alimenté par LDAP [RESOLU]

Tri Tableau Multidimensionnel alimenté par LDAP [RESOLU] [RESOLU] - PHP - Programmation

Marsh Posté le 20-01-2005 à 21:23:19    

Bonjour à tous,
 
tout d'abord je tiens à féliciter ceux qui se donnent du mal pour répondre, ça fait plaisir de voir tant de gens solidaires en parcourant les topics !
 
**** Intro pas interressante du tout ***
je suis un p'tit nouveau en PHP et donc aprés prés de 15 jours pour dompter les requettes LDAP ça fait deux jours que je m'arrache les cheveux pour essayer de trier proprement mes données... Tout les sites que j'ai pu voir sur la fonction array_multisort sont trés balaise pour reprendre la doc PHP mot pour mot...
****************************************
 
Bon je choppe des infos dans un annuaire LDAP sans problème et je stoque ça dans un tableau Multi Dimensionnel, genre:
 
Boucle avec $i pour parcourir toutes les entrées du DN
{
$Resultat[$i][cn] = Requette pour recup "cn"
$Resultat[$i][description] = Requette pour recup "description"
$Resultat[$i][phone] = Requette pour recup "telephone"
...
}
 
Donc j'arrive bien à afficher mes Résultats et même a les Trier sur le premier critère avec:
 
array_multisort ($Resultat);
 
mais j'aimerais pouvoir trier en fonction de [description] ou [phone] ect...
 
Voilà ben merci pour votre attention.  :hello:


Message édité par Fish Moon le 22-01-2005 à 10:03:17
Reply

Marsh Posté le 20-01-2005 à 21:23:19   

Reply

Marsh Posté le 20-01-2005 à 22:18:53    

http://ch2.php.net/manual/fr/funct [...] tisort.php

meddle at dzygn.com le 05-Oct-2004 04:40 a écrit :

 
If you want to sort a multidomensional array by key name you cannot use array_multisort. ie: for an array named $archivos that prints like this:
 
Array
(
   [0] => Array
       (
           [index] => 0
           [name] => test
       )
 
   [1] => Array
       (
           [index] => 0
           [name] => watertaxi.jpg
       )
 
   [2] => Array
       (
           [index] => 0
           [name] => 2_0003.JPG
       )
 
   [3] => Array
       (
           [index] => 0
           [name] => 24A_0025.JPG
       )
 
   [4] => Array
       (
           [index] => 1
           [name] => _CIMG3501.JPG
       )
 
)
 
If I wanted to order by "name" I'd use:
 
function comparar($a, $b) {
       return strnatcasecmp($a["name"], $b["name"]);
}
usort($archivos, "comparar" );
 
This function performs a case insensitive string comparison using a "natural order" algorithm (strnatcasecmp), resulting in:
 
Array
(
   [0] => Array
       (
           [index] => 0
           [name] => 2_0003.JPG
       )
 
   [1] => Array
       (
           [index] => 0
           [name] => 24A_0025.JPG
       )
 
   [2] => Array
       (
           [index] => 0
           [name] => test
       )
 
   [3] => Array
       (
           [index] => 0
           [name] => watertaxi.jpg
       )
 
   [4] => Array
       (
           [index] => 1
           [name] => _CIMG3501.JPG
       )
 
)




 
Comme indique dans le commentaire, tu dois utiliser usort pour faire le triage que tu veux. Array_multisort ne fonctionne pas pour le tri que tu veux.


Message édité par cerel le 20-01-2005 à 22:21:04
Reply

Marsh Posté le 20-01-2005 à 22:34:10    

Ca marche impec ! MERCI bcp !  :bounce:  
 
y'a un tout petit bémol mais je vais y réfléchir un peu avant d'envisager un repost...
 

Reply

Marsh Posté le 09-02-2005 à 18:12:52    

Salut tlm,
 
Je me permets de remonter ce topic.
 
La fonction donnée ici ert sur www.php.net pour un tableau de tri multidimensionnel fonctionne bien, mais a un gros souci de perfs (en tout cas chez moi).
 
Pour trier un tableau à deux dimensions de 4000 éléments sur la seconde colonne, ça prend plus de 15 secondes !
 
A tel point que j'ai fini par concaténer mes champs, pour pouvoir utiliser  un rsort() et refaire ensuite un explode(). Très sale, mais ça ne prend plus que quelques dixièmes.
 
Si quelqu'un a le même genre d'expérience à partager, j'en serais ravi :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed