在 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中文网其他相关文章!