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
Libérer: 2024-12-25 04:51:12
original
353 Les gens l'ont consulté

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],
];
Copier après la connexion

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);
}
Copier après la connexion

Nous pouvons maintenant utiliser usort pour trier le tableau :

usort($array, 'cmp');
Copier après la connexion

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);
});
Copier après la connexion
  • 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']);
Copier après la connexion
  • 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));
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal