首頁  >  文章  >  後端開發  >  php怎麼根據陣列中兩個欄位來排序

php怎麼根據陣列中兩個欄位來排序

PHPz
PHPz原創
2023-04-18 09:06:04879瀏覽

在 PHP 中,當我們需要對陣列進行排序時,可以使用 sort()、rsort() 等內建函數來對陣列中的元素進行排序。但是,有時候我們需要根據數組中的兩個欄位來進行排序,這時就需要使用 usort() 函數了。

usort — 使用使用者自訂的比較函數對陣列中的值進行排序

語法:bool usort ( array &$array, callable $value_compare_func )

該函數使用指定的比較函數對數組中的值進行排序。需要注意的是,此函數直接影響原始數組,它不會傳回排序後的數組。

使用場景

在處理一些複雜的應用程式時,有時候需要依照多個欄位來排序,例如優先依照價格排序,價格一樣時再依照銷售排序,那麼我們就需要使用usort() 函數來實作。

範例程式碼

下面是一個實際的使用 usort() 函數排序數組的範例。假設我們有一個商品數組,包含商品的名稱、價格、銷售等信息,現在我們需要根據價格和銷售量來對商品進行排序。

$products = [
   [
      "name" => "商品A",
      "price" => 100,
      "sales" => 200
   ],
   [
      "name" => "商品B",
      "price" => 120,
      "sales" => 150
   ],
   [
      "name" => "商品C",
      "price" => 80,
      "sales" => 300
   ],
];

function cmp($a, $b) {
   if ($a['price'] == $b['price']) {
      return $a['sales'] < $b[&#39;sales&#39;] ? 1 : -1;
   }
   return $a[&#39;price&#39;] > $b['price'] ? 1 : -1;
}

usort($products, "cmp");

print_r($products);

運行結果:

Array
(
    [0] => Array
        (
            [name] => 商品C
            [price] => 80
            [sales] => 300
        )

    [1] => Array
        (
            [name] => 商品A
            [price] => 100
            [sales] => 200
        )

    [2] => Array
        (
            [name] => 商品B
            [price] => 120
            [sales] => 150
        )
)

這裡我們定義了一個cmp() 函數,該函數用於比較兩個商品的價格和銷量,並按照價格從小到大、銷量從大到小的順序排序。然後透過 usort() 函數對商品數組進行排序,並列印排序後的結果。

總結

使用 usort() 函數可以靈活地對陣列進行排序,可以根據多個欄位進行排序,實現更複雜的應用需求。這裡要注意,排序函數要比較的是兩個陣列元素,因此$a 和$b 分別表示陣列中的兩個元素,函數需要傳回正數、負數和0 三個值中的一個,表示$a 比$b 大、小或相等。

以上是php怎麼根據陣列中兩個欄位來排序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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