2013-08-15 5 views
0

У меня есть массив со следующей структурой:Сортировка многомерного массива с 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 
) 

Мне нужно сортировать ResultMass элементы на «FlightsTo-> Flight-> Компания» строка этого элементов. Как я могу это сделать, используя функцию array_multisort? Или это можно сделать другим способом? Благодарю.

ответ

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; 
}); 
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; 
}); 
Смежные вопросы