8795 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai un tableau avec à l'intérieur des objets, j'aimerai trier mon tableau en utilisant comme valeur de tri un des attributs de mon objet.

ex : $array( 0 => objet { id, nom, titre }, 1 => objet { id, nom, titre } ...etc )

Et donc je veux trier mon tableau sur l'attribut nom.

Quelqu'un aurait-il une idée de la manière à suivre ?

En cherchant sur le net j'ai peut être trouver une piste avec la fonction php uasort () mais je ne comprends pas comment l'utiliser dans mon cas précis.
Modifié par erehcab (06 Oct 2008 - 16:27)
Salut,
Il te faut une fonction perso qui prend deux objets et va retourner un nombre négatif, positif, ou nul selon que le premier objet est "inférieur", "supérieur" ou "égal" au deuxième objet.
$arr = array( 0 => objet { id, nom, titre }, 1 => objet { id, nom, titre } ...etc );
usort
(
    $arr,
    create_function
    (
        '$obj1, $obj2',
        'return strcmp($obj1->nom, $obj2->nom);'
    )
);


J'ai utilisé usort car les clés sont numériques. Si ton tableau est une map et que tu veux conserver les clés, utilise uasort à la place.

J'ai utilisé create_function mais tu peux aussi bien définir cette fonction de manière classique et passer son nom en argument à usort.

Dans la fonction, je retourne simplement le résultat de strcmp appliqué à la propriété nom des deux objets.

Tu as un exemple dans la doc de la fonction usort où la fonction de comparaison est une méthode static de la classe des objets à comparer (l'exemple 3).
A toi de voir quelle méthode te semble la plus appropriée.

a+
Salut,


Juste pour ajouter que la meilleure méthode reste de trier les éléments du tableau a priori quand c'est possible (notamment si tes objets sont le résultat d'une requête SQL ...) Smiley cligne
Ok merci, je comprends mieux l'utilisation de cette fonction maintenant. Je sais que sa serait mieux de trier directement de la requête mais il y aune valeur (celle qui concerne le tri) qui est dur à intégrer à la requête de base afin de trier dessus ..