按屬性對陣列中的物件進行排序
處理物件陣列時,您可能會遇到需要根據特定屬性來組織它們的情況領域或財產。本文解決如何按指定欄位(例如名稱或計數)對物件數組進行排序的問題。
為了實現此目的,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']);
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中文網其他相關文章!