Probleme de trier par ordre alphabétique de tableau

Probleme de trier par ordre alphabétique de tableau - PHP - Programmation

Marsh Posté le 04-08-2009 à 11:24:15    

Bonjour,
 
Avant toute chose sachez que je suis débutant en PHP. J'ai un petit soucis, j'aimerai trier par ordre alphabétique un tableau multidimentionnel. J'ai réussi avec la fonction "array_multisort". Le soucis c'est qu'il me met au départ les mot commencant par une majuscule et à la fin les mots commencant par une minuscule. Voici le code:
 

Code :
  1. $tab_nom = array(
  2.  0 => array ( "a" => "chien",    "b" => "url_chien" ),
  3.  1 => array ( "a" => "chat",     "b" => "url_chat" ),
  4.  2 => array ( "a" => "souris",    "b" => "url_souris" ),
  5.  3 => array ( "a" => "Cheval",    "b" => "url_cheval" ),
  6.  4 => array ( "a" => "Mouche",    "b" => "url_mouche" ),
  7. );
  8. array_multisort($tab_nom, SORT_ASC);


 
Ce qui me trie dans cet ordre:
 
Cheval
Mouche
chat
chien
souris
 

Code :
  1. Array ( [0] => Array ( [a] => Cheval [b] => url_cheval ) [1] => Array ( [a] => Mouche [b] => url_mouche ) [2] => Array ( [a] => chat [b] => url_chat ) [3] => Array ( [a] => chien [b] => url_chien ) [4] => Array ( [a] => souris [b] => url_souris )


 
 
Ce que je veux:
 
chat
Cheval
chien
Mouche
souris
 

Code :
  1. Array ( [0] => Array ( [a] => chat [b] => url_chat ) [1] => Array ( [a] => Cheval [b] => url_cheval ) [2] => Array ( [a] => chien [b] => url_chien ) [3] => Array ( [a] => Mouche [b] => url_mouche ) [4] => Array ( [a] => souris [b] => url_souris )


 
J'ai essayer avec plusieurs autres fonction PHP tel que sort, usort etc... mais je n'ai jamais eu le résultat voulu (il faut que je trie a partir de la valeur "a".
Avec vous une idée?
 
Merci!
 
edit: je viens d'essayer le system suivant:  

Code :
  1. $array_lowercase = array_map('strtolower', $tab_nom);
  2. array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $tab_nom);


 
Ca me sort l'erreur suivante autant de fois qu'il y a de valeur dans mon tableau:
Notice: Array to string conversion in /mon_fichier.php on line 67
 
La ligne 67 étant:

Code :
  1. $array_lowercase = array_map('strtolower', $tab_nom);


Message édité par niklos0 le 04-08-2009 à 12:32:18
Reply

Marsh Posté le 04-08-2009 à 11:24:15   

Reply

Marsh Posté le 04-08-2009 à 11:51:46    

salut,

 

a priori le problème vient aussi du fait que tu as un tableau de ligne et multisort prend un tableau de colonne, en plus du problème de casse.

 

http://us3.php.net/manual/en/funct [...] tisort.php (voir exemples #3 et #4)

 

du coup avec ca, ca marche (chez moi ^^):

Code :
  1. foreach ($tab_nom as $key => $row) {
  2.     $a[$key]  = $row['a'];
  3.     $b[$key] = $row['b'];
  4. }
  5. array_multisort(array_map('strtolower', $a), SORT_ASC, $tab_nom);

Message cité 1 fois
Message édité par pataluc le 04-08-2009 à 11:53:01
Reply

Marsh Posté le 04-08-2009 à 11:56:01    

pataluc a écrit :

salut,
 
a priori le problème vient aussi du fait que tu as un tableau de ligne et multisort prend un tableau de colonne, en plus du problème de casse.
 
http://us3.php.net/manual/en/funct [...] tisort.php (voir exemples #3 et #4)
 
du coup avec ca, ca marche (chez moi ^^):

Code :
  1. foreach ($tab_nom as $key => $row) {
  2.     $a[$key]  = $row['a'];
  3.     $b[$key] = $row['b'];
  4. }
  5. array_multisort(array_map('strtolower', $a), SORT_ASC, $tab_nom);



 
 
Merci pour ta réponse!
Cependant comment puis-je faire un tableau de colonne (Dans mon cas, je doute que ce soit le bon plan :/)? Car là mis a par le case sensitive, ca fonctionne.

Reply

Marsh Posté le 04-08-2009 à 15:17:55    

niklos0 a écrit :


 
 
Merci pour ta réponse!
Cependant comment puis-je faire un tableau de colonne (Dans mon cas, je doute que ce soit le bon plan :/)? Car là mis a par le case sensitive, ca fonctionne.


 
En fait je vien de comprendre que c'était pas si compliquer de modifier mon tableau :p. Ca marche parfaitement, merci

Reply

Marsh Posté le 04-08-2009 à 15:19:40    

Voici la solution:
 
 

Code :
  1. $tab_nom[] = array ( "a" => "chien",    "b" => "url_chien" );
  2. $tab_nom[] = array ( "a" => "chat",     "b" => "url_chat" );
  3. $tab_nom[] = array ( "a" => "souris",    "b" => "url_souris" );
  4. $tab_nom[] = array ( "a" => "Cheval",    "b" => "url_cheval" );
  5. $tab_nom[] = array ( "a" => "Mouche",    "b" => "url_mouche" );
  6. );
  7. foreach ($tab_nom as $key => $row) {
  8.     $nom[$key]  = $row["a"];
  9.     $url[$key] = $row["b"];
  10. }
  11. array_multisort(array_map('strtolower', $nom), SORT_ASC, $tab_nom);


 
Encore merci ;)

Reply

Marsh Posté le 04-08-2009 à 16:55:59    

Hé hé, vous voulez rire??
J'ai le meme probleme avec les accents.
J'aimerai que le ç soit avec le c, le é avec le e etc... et non a la fin comme me le fait.
J'ai chercher, j'ai trouver des solutions, mais encore une fois, je n'arrive à le faire marcher que avec une string et pas dans un tableau... Quelqu'un à une idée?

Reply

Sujets relatifs:

Leave a Replay

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