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。 早!