Tri multi-dimensionnel

Résolu
Signaler
Messages postés
3
Date d'inscription
mercredi 5 mai 2004
Statut
Membre
Dernière intervention
19 avril 2005
-
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Bonjour,
J'ai un tableau :
Array
(
[10900] => Array
(
[nom] => Aline
[bon] => 0
)


[10905] => Array
(
[nom] => Olivier
[bon] => 0
)
...)
Je souhaite trier ce tableau par ordre alphabétique sur les noms, SANS PERDRE MA CLÉ (10900, 10905, ...)
J'ai réussi à trier ce tableau multi-dimensionnel sur les noms grace à array_multisort, mais mes clés devenaient 0, 1, 2...
Quelqu'un peut-il m'aider ???
Merci

6 réponses

Messages postés
3
Date d'inscription
mercredi 5 mai 2004
Statut
Membre
Dernière intervention
19 avril 2005

Ben ça ne marche pas vraiment... Pourtant ça devrait !
Par contre, on a trouvé un truc avec un collègue :
si la clé est une chaine de caractère et non un nombre, il garde bien la clé. Donc je construit mon tableau ainsi :

foreach ($aTableau as $sCle= >$aVal)
{
$aTab[ serialize ($aVal[0])] = array($aNoms[$aVal[0]], 0);
}
array_multisort($Tab, SORT_ASC);

Je serialize ma clé pour en faire une chaine de caractère :
Array
(
[s:5:"11006";] => Array
(
[nom] => Aline
[bon] => 0
)

[s:5:"10927";] => Array
(
[nom] => Louis
[bon] => 0
)

[s:5:"11593";] => Array
(
[nom] => Olivier
[bon] => 0

)
...
et quand je la récupère, je la "unserialize".
Merci pour le coup de main quand même !
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Hello,



ce n'est pas tres orthodoxe, mais a priori ca a l'air de marcher. A tester quand meme hein... :



<?php



$tab array (10900> array ('nom' => 'Olivier', 'bon' => 0), 19050=> array ('nom' => 'Aline', 'bon' => 0));

?>



<?php

print_r ($tab);

?>



<?php



function comparaison ($valeurA, $valeurB) {

if ($valeurA['nom'] === $valeurB['nom'])

return 0;

return ($valeurA['nom'] > $valeurB['nom']) ? -1 : 1;

}



uksort ($tab, 'comparaison');

?>



<?php

print_r ($tab);

?>
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Et a ameliorer parce que la je fais une comparaison sur le code ASCII
donc il y aura probleme en cas de comparaison majuscules / minuscules.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Bon j'ai modifie la fonction moi-meme, c'etait simple et je n'y avais pas pense :



function comparaison ($valeurA, $valeurB) {

if ($valeurA['nom'] === $valeurB['nom'])

return 0;

return (strtolower ($valeurA['nom']) > strtolower($valeurB['nom'])) ? -1 : 1;

}
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Oups :



function comparaison ($valeurA, $valeurB) {

if (strtolower ($valeurA['nom']) === strtolower ($valeurB['nom']))

return 0;

return (strtolower ($valeurA['nom']) > strtolower ($valeurB['nom'])) ? -1 : 1;

}
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Hello,



ben c#etait ma prochaine solution si celle-ci ne fonctionnait pas lol.
Mais je n'etais pas sur que tu acceptes de modifier un tant soit peu
tes index.