首頁  >  文章  >  後端開發  >  PHP 陣列進階排序:自訂比較器和 匿名函數

PHP 陣列進階排序:自訂比較器和 匿名函數

王林
王林原創
2024-04-27 11:09:02502瀏覽

在 PHP 中,以自訂順序對陣列排序有兩種方式:自訂比較器:實作 Comparable 介面並指定兩個物件的比較規則。匿名函數:建立無名函數作為自訂比較器,用於比較兩個物件的標準。

PHP 数组高级排序:自定义比较器和 匿名函数

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中文網其他相關文章!

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