在 PHP中以多個欄位值對數組進行排序
問題:
你有一個資料結構複雜的數組,需要根據多個字段值進行升序排序
示例:
考慮以下數組:
$array = [ [ "destination" => "Sydney", "airlines" => "airline_1", "one_way_fare" => 100, "return_fare" => 300 ], [ "destination" => "Sydney", "airlines" => "airline_2", "one_way_fare" => 150, "return_fare" => 350 ], [ "destination" => "Sydney", "airlines" => "airline_3", "one_way_fare" => 180, "return_fare" => 380 ] ];
您希望按第一個“return_fare”升序對該數組進行排序然後按“one_way_fare”也按升序排列
解決方案:
要依照描述對陣列進行排序,可以使用array_multisort() 函數。但是,它要求您將要排序的值提取到單獨的陣列中。這可以使用 array_column() 來完成。
// Extract "return_fare" and "one_way_fare" into separate arrays $return_fare = array_column($array, 'return_fare'); $one_way_fare = array_column($array, 'one_way_fare'); // Sort the array using multiple criteria array_multisort($return_fare, SORT_ASC, $one_way_fare, SORT_ASC, $array);
排序後,$array 將被修改以反映排序順序。
替代解決方案:
您也可以使用PHP 手冊頁中的array_orderby() 函數來簡化上述操作碼:
// Sort the array using "array_orderby" $sorted = array_orderby($array, 'return_fare', SORT_ASC, 'one_way_fare', SORT_ASC);
注意:
如果您使用的是PHP 5.5 或更高版本,您可以透過直接使用 array_column() 和 array_multisort() 來避免循環:
array_multisort( array_column($array, 'return_fare'), SORT_ASC, array_column($array, 'one_way_fare'), SORT_ASC, $array );
以上是如何按多個欄位對多維 PHP 陣列進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!