1. ホーム
  2. php

[解決済み] オブジェクトの配列をオブジェクトのフィールドでソートする

2022-03-17 14:39:28

質問

このオブジェクトの配列を、次のようにフィールドの1つで並べ替えるにはどうしたらよいでしょうか。 name または 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
        )

   ....

解決方法は?

使用方法 使用方法 以下は、マニュアルから引用した例です。

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 を "compare" 関数として使用すればよいでしょう。また、同じことを別の方法で行いたい場合は、PHP 7 以降では 宇宙船演算子 のようなものです。 fn($a, $b) => $a->count <=> $b->count .