Maison  >  Questions et réponses  >  le corps du texte

Trier un tableau d'objets en fonction d'une propriété spécifique

<p>Comment puis-je trier ce tableau d'objets par un champ tel que <code>name</code> ou <code>count</code> ? </p> <pre class="brush:php;toolbar:false;">Array ( [0] => Objet stdClass ( [ID] => 1 [nom] => [compte] => 420 ) [1] => Objet stdClass ( [ID] => [nom] => [compte] => ) [2] => Objet stdClass ( [ID] => 3 [nom] => [compte] => 4354 ) ....</pré> <p><br /></p>
P粉426780515P粉426780515448 Il y a quelques jours568

répondre à tous(2)je répondrai

  • P粉285587590

    P粉2855875902023-08-22 00:56:43

    C'est une meilleure façon d'utiliser les fermetures

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

    Veuillez noter que cela ne figure pas dans la documentation PHP, mais si vous utilisez la version 5.3+, les fermetures sont prises en charge et vous pouvez fournir des paramètres appelables.

    répondre
    0
  • P粉020085599

    P粉0200855992023-08-22 00:31:39

    En utilisant usort, voici un exemple adapté du manuel :

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

    Vous pouvez également utiliser n'importe quel callable comme deuxième argument. Voici quelques exemples :

    • Utilisez des fonctions anonymes (à partir de PHP 5.3)

      usort($your_data, function($a, $b) {return strcmp($a->name, $b->name);});
    • Utilisé à l'intérieur de la classe

      usort($your_data, array($this, "cmp")); // "cmp"应该是类中的一个方法
    • Utilisez les fonctions fléchées (à partir de PHP 7.4)

      usort($your_data, fn($a, $b) => strcmp($a->name, $b->name));

    De plus, si vous souhaitez comparer des valeurs numériques, fn($a, $b) => $a->count - $b->count comme fonction de "comparaison" devrait résoudre le problème, Alternativement, si vous souhaitez faire la même chose d'une autre manière, en commençant par PHP 7, vous pouvez utiliser Opérateur de vaisseau spatial fn($a, $b) => $a->count - $b->count作为“比较”函数应该可以解决问题,或者,如果你想以另一种方式做同样的事情,从PHP 7开始你可以使用太空船操作符,像这样:fn($a, $b) => $a->count <=> $b->count, comme ceci : fn($a, $b) => $a->count <=> $ b ->compte.

    répondre
    0
  • Annulerrépondre