2014-10-14 2 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는 PHP의 자신의 SPL 라이브러리의 SplMinHeap 클래스와 배열

$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 
    ] 
]); 

이 잘 작동하는 방식이다 명심 순서

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을 사용하는 것이 더 나은 해결책입니다.

관련 문제