オブジェクトの配列を1つのプロパティで並べ替える 質問する

オブジェクトの配列を1つのプロパティで並べ替える 質問する

このオブジェクトの配列を、 または などのフィールドの 1 つで並べ替えるにはどうすればよいでしょうnamecount?

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
        )

   ....

ベストアンサー1

使用並べ替え比較機能をカスタマイズします。以下はマニュアルから引用した例です。

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

usort($your_data, "cmp");

任意の呼び出し可能2 番目の引数として。次に例をいくつか示します。

  • 使用匿名関数(PHP 5.3 以降)

      usort($your_data, function($a, $b) {return strcmp($a->name, $b->name);});
    
  • クラスの中から

      usort($your_data, array($this, "cmp")); // "cmp" should be a method in the class
    
  • 使用矢印関数(PHP 7.4 以降)

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

また、数値を比較する場合は、fn($a, $b) => $a->count - $b->count「比較」関数で十分ですが、同じことを別の方法で行いたい場合は、PHP 7以降では、宇宙船オペレーター、 このような:fn($a, $b) => $a->count <=> $b->count

おすすめ記事