2014-10-14 6 views
0

Я пытаюсь сортировать ключи своего массива в зависимости от последовательности элементов, которые я создал.Array_multisort не может найти мой ассоциативный ключ

Вот пример моего массива:

[ 
{ 
-14297: [ 
    -{ 
     waypoint_id: "14297" 
     sequence: 27 
     order_id: 12271 
     } 
    ] 
-34502: [ 
    -{ 
     waypoint_id: "34502" 
     sequence: 19 
     order_id: 30484 

     }, 
    -{ 
     waypoint_id: "345202" 
     sequence: 19 
     order_id: 433 

     } 
    ] 

До сих пор я пытался сделать это:

$sort = array(); 
    foreach($myArr as $k=>$v) { 
     $sort['sequence'][$k] = $v['sequence']; 

    } 
    array_multisort($sort['sequence'], SORT_ASC, $myArr); 

Но я получаю сообщение об ошибке, что «последовательность» не определена.

MY ожидается выход следующим образом:

[ 
-34502: [ 
    -{ 
     waypoint_id: "34502" 
     sequence: 19 
     order_id: 30484 

     }, 
    -{ 
     waypoint_id: "345202" 
     sequence: 19 
     order_id: 433 

     } 

    -14297: [ 
    -{ 
     waypoint_id: "14297" 
     sequence: 27 
     order_id: 12271 
     } 
    ] 

    ] 

Примечание: Это объект JSON. Я возвращаю $ myArr;

print_r дает мне это:

Array 
(
    [36862] => Array 
     (
      [0] => Array 
       (
        [waypoint_id] => 36862 
        [sequence] => 1 
        [order_id] => 32628 

       ) 

     ) 

    [35633] => Array 
     (
      [0] => Array 
       (
        [waypoint_id] => 35633 
        [sequence] => 2 
        [order_id] => 31452 

       ), 
      [1] => Array 
       (
        [waypoint_id] => 35633 
        [sequence] => 2 
        [order_id] => 34343 

       ) 

     ) 

Что дает мне правильный возврат ..

+0

Какой результат вы ожидаете? Отправьте свой окончательный ожидаемый результат. – Rikesh

+0

Можете ли вы сделать 'print_r ($ myArr);' и показать нам результат этого? – Jerodev

+0

Является ли это json Object? –

ответ

0

Так что, если вы можете дать ваш массив структуру, что сопоставимо следующий пример должен работать очень хорошо для вы.

Unsortet Массив

$array = new ArrayIterator([ 
    [ 
     'element_id' => 34502, 
     'waypoint_id' => 34502, 
     'sequence' => 19, 
     'order_id' => 30484 
    ], 
    [ 
     'element_id' => 34502, 
     'waypoint_id' => 345202, 
     'sequence' => 19, 
     'order_id' => 433 
    ], 
    [ 
     'element_id' => 14297, 
     'waypoint_id' => 14297, 
     'sequence' => 27, 
     'order_id' => 12271 
    ] 
]); 

С класса SplMinHeap собственной библиотеки PHP «s SPL вы можете отсортировать массив по последовательности

class SequenceMinHeap extends SplMinHeap { 
    public function compare($sequence1, $sequence2) { 
     return $sequence2['sequence'] - $sequence1['sequence']; 
    } 
} 

$result = new SequenceMinHeap(); 
while ($array->valid()) { 
    $result->insert($array->current()); 
    $array->next(); 
} 

Имейте в виду, что это подход, который отлично работает с хорошо структурированным массивом. Если вы не можете организовать свой массив, вы должны попытаться заставить этот подход работать рекурсивным в своем исходном массиве. Это приводит к чертовой работе. Поэтому, возможно, использование SplHeap с хорошо организованным массивом - лучшее решение.

Смежные вопросы