2017-10-03 1 views
0

다음과 같은 배열 구조가 있습니다.특정 다차원 중첩 배열 수준을 하위 요소 값 이름별로 정렬

Array 
    (
     [category1] => Array 
      (
       [2694] => Array 
        (
         [node_name] => "B" 

        ) 

       [2695] => Array 
        (
         [node_name] => "A" 

        ) 
       [2696] => Array 
        (
         [node_name] => "C" 

        ) 
      ) 
    ) 

노드 번호별로 번호가있는 상위 배열을 원합니다. 예상되는 결과는 이와 같아야합니다.

Array 
(
    [category1] => Array 
     (
      [2695] => Array 
       (
        [node_name] => "A" 

       ) 

      [2694] => Array 
       (
        [node_name] => "B" 

       ) 
      [2696] => Array 
       (
        [node_name] => "C" 

       ) 
     ) 
) 

나는 multisort 시도하고 uasort 염두에주의해야한다 여러 범주를 funcion

function cmp($a, $b) { 
    return $a['node_name'] > $b['node_name'] ? 1 : -1; 
} 

를 사용하지만이있다, 그래서 나는 범주를 반복하고 내부 요소에 uasort 또는 multisort 사용하는 것을 시도했다 . 확실한 방법이 없으므로이 문제를 해결해야합니다. 누군가 중첩 된 배열을 해결하고 하위 요소의 이름을 기반으로 특정 수준을 정렬 한 경험이 있는지 궁금합니다.

도움을 주시면 감사하겠습니다.

답변

0

내가 옳은 일을하고 있습니다.

<?php 

$cats = array(
    'category1' => array(
    2694 => array('node_name' => 'B'), 
    2695 => array('node_name' => 'A'), 
    2696 => array('node_name' => 'C'), 
), 
    'category2' => array(
    2691 => array('node_name' => 'T'), 
    2692 => array('node_name' => 'S'), 
    2693 => array('node_name' => 'A'), 
) 
); 

function cmp($a, $b) { 
    return $a['node_name'] > $b['node_name'] ? 1 : -1; 
} 

foreach ($cats as $category => $data) { 
    uasort($data, 'cmp'); 
    $cats[$category] = $data; 
} 

var_dump($cats); 

는 출력 :

array(2) { 
    ["category1"]=> 
    array(3) { 
    [2695]=> 
    array(1) { 
     ["node_name"]=> 
     string(1) "A" 
    } 
    [2694]=> 
    array(1) { 
     ["node_name"]=> 
     string(1) "B" 
    } 
    [2696]=> 
    array(1) { 
     ["node_name"]=> 
     string(1) "C" 
    } 
    } 
    ["category2"]=> 
    array(3) { 
    [2693]=> 
    array(1) { 
     ["node_name"]=> 
     string(1) "A" 
    } 
    [2692]=> 
    array(1) { 
     ["node_name"]=> 
     string(1) "S" 
    } 
    [2691]=> 
    array(1) { 
     ["node_name"]=> 
     string(1) "T" 
    } 
    } 
} 
+0

예, 속임수를 썼는지 그, 나도 같은 짓을,하지만 난 상위 배열을 업데이트하지 않은, 감사합니다! –