Probleme de tri de tableau

Signaler
Messages postés
37
Date d'inscription
mercredi 2 janvier 2008
Statut
Membre
Dernière intervention
28 août 2008
-
Messages postés
37
Date d'inscription
mercredi 2 janvier 2008
Statut
Membre
Dernière intervention
28 août 2008
-
Bonjour,
voila mon problème :
j'ai un tableau de la forme $Tableau[$i][$j][] que je voudrais ranger dans l'ordre alphabétique. J'ai déjà essayé avec sort() mais cela ne marche pas.
Quelqu'un aurait-il une petite idée pour le tri?
Merci d'avance.

7 réponses

Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
Messages postés
37
Date d'inscription
mercredi 2 janvier 2008
Statut
Membre
Dernière intervention
28 août 2008

slt,
merci pour ta réponse même si elle ne permet pas de résoudre mon problème. La fonction présentait permet de ne pas tenir compte des majuscules/minuscules du mot mais mon problème est autre.
Voici le code me permettant de remplir le tableau que j'aimerai bien pourvoir trier:

$numboucle=1;
$numcontact=1;
$numhotel=1;
foreach($Societe1 as $societe){
      $sr1 = ldap_search ($ds, $societe[26], "cn=*");
      $info1 = ldap_get_entries ($ds, $sr1);
       for ($j=0; $j < $info1 ["count"]; $j++){
               $Contact[$j][$numboucle][0]=$info1[$j]["uid"][0];
               $Contact[$j][$numboucle][1]=$info1[$j]["cn"][0];
               $Contact[$j][$numboucle][2]=$info1[$j]["telephonenumber"][0];
               $Contact[$j][$numboucle][3]=str_replace("Autre Telephone: ","",$info1[$j]["telephonenumber"][1]);
               $Contact[$j][$numboucle][4]=$info1[$j]["mobile"][0];
               $Contact[$j][$numboucle][5]=$info1[$j]["mail"][0];
               $Contact[$j][$numboucle][6]=$info1[$j]["businesscategory"][0];
               $Contact[$j][$numboucle][7]=$info1[$j]["initials"][0];
               $Contact[$j][$numboucle][8]=$info1[$j]["displayname"][0];
               $Contact[$j][$numboucle][9]=$info1[$j]["title"][0];
               $Contact[$j][$numboucle][10]=$info1[$j]["employeetype"][0];
               $Contact[$j][$numboucle][11]=$info1[$j]["dn"];
                }
       sort($Contact);

Quelqu'un a une petite idée??
merci d'avance.
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
As-tu essayé (a la place de sort($Contact);):
$ContactAlpha = usort($Contact, "strcasecmp");

// afficher le resultat :
for ($m=0;$m<Sizeof($ContactAlpha);$m++) {
echo 'ContactAlpha('. $m. ') : '. $ContactAlpha[$m] .'
';
}
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Hello,

@jreaux : non ça ne fonctionnera pas, ta fonction va comparer les tableaux qui sont les valeurs des 1ères clefs. De plus, usort() renvoie un booléen...:-) On ne l'utilise pas comme ça non plus : le tableau lui est passé par référence.

@zabroska : il faut aussi savoir comment tu veux comparer ? Chaque clef de la profondeur 1 indépendamment ?  Ou sans tenir compte de ces clefs ?
Dans tous les cas, tu ne trouveras rien de tout fait. Il faudra y bosser un peu :-) Vois du côté de array_multisort(), et avec un peu d'imagination...ça devrait le faire.
Messages postés
37
Date d'inscription
mercredi 2 janvier 2008
Statut
Membre
Dernière intervention
28 août 2008

Slt,
merci pour ces réponses!
je vais tester ta solution "malalam" mais avant je voudrais savoir sur quelle partie du tableau s'effectue le tri dans l'exemple que j'ai donné auparavant car lorsque j'exécute ce bout de code le tri s'effectue sur une partie des données sauf les 3 derniers de ce qui s'affiche.
merci d'avance.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Tu veux trier comment au juste ? Donne un exemple : le tableau AVANT du type :
array(
  0 => array(val1, bal2, val3),
  1 => array(val4, val5, val6);
  etc...
)
et ce que tu veux obtenir après.
Messages postés
37
Date d'inscription
mercredi 2 janvier 2008
Statut
Membre
Dernière intervention
28 août 2008

bonjour,
dans le tableau d'avant, je voudrais trier le tableau à chaque fin de la boucle " for ($j=0; $j < $info1 ["count"]; $j++){" pour pouvoir par la suite afficher les différentes personnes d'une même société dans l'ordre alphabétique. De plus, la variable $numboucle ne change pas au cours de la boucle. le tri se fait sur l'info suivante : "$Contact[$j][$numboucle][0]=$info1[$j]["uid"][0];".
le résultat souhaité :
Société1
   personnelA
   personnelB
   personnelC
SociétéX
   personnelA1

   personnelB1

   personnelC1

J'espere que mes explications sont assez claires.
Merci encore pour l'aide!