在 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['sales'] ? 1 : -1; } return $a['price'] > $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中文網其他相關文章!