在 PHP 中,以自訂順序對陣列排序有兩種方式:自訂比較器:實作 Comparable 介面並指定兩個物件的比較規則。匿名函數:建立無名函數作為自訂比較器,用於比較兩個物件的標準。
PHP 陣列進階排序:自訂比較器和匿名函數
在PHP 中,以自訂順序對陣列進行排序需要超出標準排序函數所能提供的功能。自訂比較器和匿名函數提供了比 sort()
、rsort()
等內建函數更靈活的排序機制。
自訂比較器
自訂比較器是一種實作 Comparable
介面的類,它定義瞭如何比較兩個物件。實作 compareTo()
方法,指定哪個物件被認為大於、小於或等於另一個物件。
class CustomComparator implements Comparable { public function compareTo($a, $b): int { if ($a == $b) { return 0; } return $a > $b ? 1 : -1; } }
匿名函數
匿名函數是未命名的函數,可以即時建立並作為參數傳遞。它們常用於建立自訂比較器:
$comparator = function($a, $b) { if ($a == $b) { return 0; } return $a > $b ? 1 : -1; };
實戰案例
#考慮一個包含學生姓名和分數的陣列:
$students = [ ['name' => 'Alice', 'score' => 85], ['name' => 'Bob', 'score' => 90], ['name' => 'Carol', 'score' => 80], ];
#自訂比較器方式
$comparator = new CustomComparator(); usort($students, [$comparator, 'compareTo']);
匿名函數方式
usort($students, function($a, $b) { return $a['score'] <=> $b['score']; });
以上程式碼將以學生分數從小到大對陣列進行排序:
[ ['name' => 'Carol', 'score' => 80], ['name' => 'Alice', 'score' => 85], ['name' => 'Bob', 'score' => 90], ];
以上是PHP 陣列進階排序:自訂比較器和 匿名函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!