Maison >développement back-end >tutoriel php >Comment trier un tableau d'objets par une propriété spécifique en PHP ?

Comment trier un tableau d'objets par une propriété spécifique en PHP ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-25 04:51:12362parcourir

How to Sort an Array of Objects by a Specific Property in PHP?

Tri des objets dans un tableau par propriété

Lorsque vous traitez des tableaux d'objets, vous pourriez rencontrer le besoin de les organiser en fonction d'un élément spécifique champ ou propriété. Cet article aborde la question de savoir comment trier un tableau d'objets par un champ spécifié, tel que le nom ou le nombre.

Pour ce faire, PHP nous fournit la fonction usort. Il prend un tableau comme premier argument et un appelable comme deuxième argument, qui sert de fonction de comparaison. Cette fonction de comparaison doit renvoyer un entier indiquant le résultat de la comparaison : -1 si le premier objet doit venir avant le second, 0 s'ils sont égaux et 1 si le deuxième objet doit venir avant le premier.

Considérons un exemple avec un tableau d'objets :

$array = [
    (object) ['name' => 'Mary Jane', 'count' => 420],
    (object) ['name' => 'Johnny', 'count' => 234],
    (object) ['name' => 'Kathy', 'count' => 4354],
];

Pour trier ce tableau par le champ de nom, nous pouvons définir une fonction de comparaison comme suit :

function cmp($a, $b) {
    return strcmp($a->name, $b->name);
}

Nous pouvons maintenant utiliser usort pour trier le tableau :

usort($array, 'cmp');

Cela triera le tableau par ordre croissant du champ de nom.

Approches alternatives

En plus de la fonction de comparaison traditionnelle, PHP propose diverses approches alternatives pour tri :

  • Fonctions anonymes : Celles-ci permettent de définir la fonction de comparaison en ligne, par exemple :
usort($array, function($a, $b) {
    return strcmp($a->name, $b->name);
});
  • A l'intérieur d'une classe : Si vous avez une classe, vous pouvez définir une méthode de comparaison et la transmettre à usort, par exemple :
class MyComparator {
    public function cmp($a, $b) {
        return strcmp($a->name, $b->name);
    }
}

$array = usort($array, [new MyComparator(), 'cmp']);
  • Fonctions fléchées (PHP 7.4) : celles-ci fournissent un moyen concis de définir des fonctions de comparaison, par exemple :
usort($array, fn($a, $b) => strcmp($a->name, $b->name));

Comparaison numérique Champs

Lors de la comparaison de champs numériques, tels que le champ de comptage dans notre exemple, vous pouvez utiliser la fonction de comparaison suivante :

fn($a, $b) => $a->count - $b->count

Alternativement, PHP 7 a introduit l'opérateur Spaceship ( <=>) qui peut être utilisé pour de telles comparaisons, par exemple :

fn($a, $b) => $a->count <=> $b->count

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn