首頁 >後端開發 >php教程 >如何在 PHP 中依特定屬性對物件數組進行排序?

如何在 PHP 中依特定屬性對物件數組進行排序?

Patricia Arquette
Patricia Arquette原創
2024-12-25 04:51:12358瀏覽

How to Sort an Array of Objects by a Specific Property in PHP?

按屬性對陣列中的物件進行排序

處理物件陣列時,您可能會遇到需要根據特定屬性來組織它們的情況領域或財產。本文解決如何按指定欄位(例如名稱或計數)對物件數組進行排序的問題。

為了實現此目的,PHP 為我們提供了 usort 函數。它接受一個數組作為其第一個參數,一個可調用物件作為其第二個參數,用作比較函數。此比較函數應傳回一個整數,指示比較結果:如果第一個物件應該出現在第二個物件之前,則傳回-1;如果它們相等,則傳回0;如果第二個物件應該出現在第一個對象之前,則傳回1。

讓我們考慮一個包含物件陣列的範例:

$array = [
    (object) ['name' => 'Mary Jane', 'count' => 420],
    (object) ['name' => 'Johnny', 'count' => 234],
    (object) ['name' => 'Kathy', 'count' => 4354],
];

要以名稱欄位對此陣列進行排序,我們可以定義一個比較函數為如下:

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

現在我們可以使用usort對陣列進行排序:

usort($array, 'cmp');

這將按名稱欄位的升序對陣列進行排序。

替代方法

除了傳統的比較函數之外,PHP也提供了各種排序的替代方法:

  • 匿名函數:這些允許您內聯定義比較函數,例如:
usort($array, function($a, $b) {
    return strcmp($a->name, $b->name);
});
  • 類別內部:如果有類,可以定義一個比較方法並透過對其進行排序,例如:
class MyComparator {
    public function cmp($a, $b) {
        return strcmp($a->name, $b->name);
    }
}

$array = usort($array, [new MyComparator(), 'cmp']);
  • 箭頭函數(PHP 7.4 ):這些提供了一種簡潔的方法來定義比較函數,例如:
usort($array, fn($a, $b) => strcmp($a->name, $b->name));

比較數字字段

比較數字字段時,例如我們示例中的計數字段,可以使用以下比較函數:

fn($a, $b) => $a->count - $b->count

或者,PHP 7 引進了Spaceship 運算子( )可用於此類比較,例如:

fn($a, $b) => $a->count <=> $b->count

以上是如何在 PHP 中依特定屬性對物件數組進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn