使用array_multisort对多维数组进行排序

时间:2013-08-15 09:47:16

标签: php sorting array-multisort

我有一个具有以下结构的数组:

 Array
    (
        [ResultMass] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        //elements and other arrays

                        [FlightsTo] => SimpleXMLElement Object
                            (
                                [Flight] => SimpleXMLElement Object
                                    (
                                        [Company] => 4G
                                        //other elements
                                    )

                            )

                        [FlightsBack] => SimpleXMLElement Object
                            (
                                [Flight] => SimpleXMLElement Object
                                    (
                                        [Company] => 4G
                                        //other elements

                                    )

                            )

                    )
                    //other elements of 'resultmass'
               )

        )

    [Error] => 0
)

我需要在“FlightsTo-> Flight-> Company”这些元素的字符串上对ResultMass元素进行排序。我怎么能通过使用array_multisort函数来做到这一点?或者可以通过其他方法完成?感谢。

2 个答案:

答案 0 :(得分:0)

您无法通过array_multisort执行此操作,因为您的数据项不是数组,而是对象。您可以使用usort()函数在数据数组中设置自己的订单。

要在您的案例中设置嵌套顺序,请使用以下示例:

usort($rgData, function($rX, $rY)
{
   if($rX->FlightsTo == $rY->FlightsTo)
   {
      if($rX->Flight == $rY->Flight)
      {
         return $rX->Company<$rY->Company?-1:$rX->Company!=$rY->Company;
      }
      return $rX->Flight<$rY->Flight?-1:1;
   }
   return $rX->FlightsTo<$rY->FlightsTo?-1:1;
});

答案 1 :(得分:0)

您可以使用自己的可调用方法使用usort函数。以下示例

usort(&$array['ResultMass'], function ($a, $b) {
   $a1 = $a->FlightsTo->Flight->Company;
   $b1 = $b->FlightsTo->Flight->Company;
   if ($a1 == $b1) return 0;
   return ($al > $bl) ? +1 : -1;
});