PHP按两个字段值sorting数组
我有一个这样的数组
arrays( [0] => Array(“destination”=>“Sydney”, “airlines”=>“airline_1”, “one_way_fare”=> 100, “return_fare => 300 ) [2] => Array(“destination”=>“Sydney”, “airlines”=>“airline_2”, “one_way_fare”=> 150, “return_fare => 350 ) [3] => Array(“destination”=>“Sydney”, “airlines”=>“airline_3”, “one_way_fare”=> 180, “return_fare => 380 ) )
如何通过return_fare asc,one_way_fare asc来分类价值?
我试过array_multisort(),但我结束了混淆数据..
asort只适用于一维数组,我需要sorting的两个值或更多,我怎么能达到这一点,在SQL中,由field1 asc,field2 asc?
array_multisort()
是正确的函数,你必须搞砸了:
// Obtain a list of columns foreach ($data as $key => $row) { $return_fare[$key] = $row['return_fare']; $one_way_fare[$key] = $row['one_way_fare']; } // Sort the data with volume descending, edition ascending array_multisort($return_fare, SORT_ASC, $one_way_fare, SORT_ASC, $data);
如果你看一下PHP的手册页array_multisort()
的注释,你可以find一个非常有用的array_orderby()
函数,它允许你缩短上面的这个:
$sorted = array_orderby($data, 'return_fare', SORT_ASC, 'one_way_fare', SORT_ASC);
为了避免循环使用array_column()
(从PHP 5.5.0开始):
array_multisort(array_column($data, 'return_fare'), SORT_ASC, array_column($data, 'one_way_fare'), SORT_ASC, $data);
除了需要先构build列数组的array_multisort()
之外,还有不需要这样的东西的usort()
。
usort($data, function($a, $b) { $rdiff = $a['return_fare'] - $b['return_fare']; if ($rdiff) return $rdiff; return a['one_way_fare'] - $b['one_way_fare']; }); // anonymous function requires PHP 5.3 - use "normal" function earlier
或者你可以使用uasort
如下
uasort($arr, function($a,$b){ $c = $a['return_fare'] - $b['return_fare']; $c .= $a['one_way_fare'] - $b['one_way_fare']; return $c; });
小提琴
哦,我又设法解决了我自己的问题。
函数array_multi_sort($ array,$ on1,$ on2,$ order = SORT_ASC) { foreach($ array为$ key => $ value){ $ one_way_fares [$ key] = $ value [$ on2]; $ return_fares [$ key] = $ value [$ on1]; } 在array_multisort($ return_fares,$顺序,$ one_way_fares,$顺序,$arrays); }
事情是我错过了array_multisort($ return_fares,$ order,$ one_way_fares,$ order,$ array)上的最后一个参数$ array。 早!