首頁  >  問答  >  主體

根據特定屬性對物件數組進行排序

<p>如何依照欄位(如<code>name</code>或<code>count</code>)對這個物件陣列進行排序? </p> <pre class="brush:php;toolbar:false;">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 ) ....</pre> <p><br /></p>
P粉426780515P粉426780515397 天前528

全部回覆(2)我來回復

  • P粉285587590

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

    這是一種使用閉包的更好的方式

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

    請注意,這不是PHP文件中的內容,但如果您使用的是5.3 版本,支援閉包,可以提供可呼叫的參數。

    回覆
    0
  • P粉020085599

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

    使用usort,以下是從手冊中改編的範例:

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

    你也可以使用任何可呼叫作為第二個參數。以下是一些範例:

    • 使用匿名函數(從PHP 5.3開始)

      usort($your_data, function($a, $b) {return strcmp($a->name, $b->name);});
    • 在類別內部使用

      usort($your_data, array($this, "cmp")); // "cmp"应该是类中的一个方法
    • 使用箭頭函數(從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

    回覆
    0
  • 取消回覆