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 :
usort($array, function($a, $b) { return strcmp($a->name, $b->name); });
class MyComparator { public function cmp($a, $b) { return strcmp($a->name, $b->name); } } $array = usort($array, [new MyComparator(), 'cmp']);
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!