660 votes

Trie un tableau d'objets par champs d'objet

Comment puis-je trier ce tableau d'objets par l'un de ses champs, comme name ou count ?

  Array
(
    [0] => stdClass Object
        (
            [ID] => 1
            [name] => Mary Jane
            [count] => 420
        )

    [1] => stdClass Object
        (
            [ID] => 2
            [name] => Johnny
            [count] => 234
        )

    [2] => stdClass Object
        (
            [ID] => 3
            [name] => Kathy
            [count] => 4354
        )

   ....

931voto

cambraca Points 7736

Utilisation usort, voici un exemple adapté du manuel:

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

usort($your_data, "cmp");

524voto

Scott Quinlan Points 1226

Heres une jolie manière, en utilisant les fermetures

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

Veuillez noter que ce n'est pas dans la documentation de PHP, mais si vous utilisez 5.3+ fermetures sont pris en charge lorsque les appelable arguments peuvent être fournis.

46voto

Doron Segal Points 205

si vous utilisez php, programmation orientée objet, vous pourriez avoir besoin de changer:

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

//in this case FUNCTION_NAME would be cmp
usort($your_data, array('YOUR_CLASS_NAME','FUNCTION_NAME')); 

34voto

zerkms Points 105994
usort($array, 'my_sort_function');

var_dump($array);

function my_sort_function($a, $b)
{
    return $a->name < $b->name;
}

Le même code sera avec l' count champ.

Plus de détails sur usort: http://ru2.php.net/usort

Btw, où avez-vous ce tableau? J'espère que pas de base de données?

3voto

Wilq Points 1329

Si vous avez besoin de locaux en fonction de comparaison de chaînes, vous pouvez utiliser strcoll au lieu de strcmp.

Rappelez-vous la première utilisation setlocale avec LC_COLLATE pour définir les paramètres régionaux d'information si nécessaire.

  usort($your_data,function($a,$b){
    setlocale (LC_COLLATE, 'pl_PL.UTF-8'); // Example of Polish language collation
    return strcoll($a->name,$b->name);
  });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X