PHP : 필드 별 요소마다 다른 깊이로 다차원 배열을 정렬합니다.

StackOverflow https://stackoverflow.com/questions/1629358

  •  06-07-2019
  •  | 
  •  

문제

내비게이션을 저장하기 위해 복잡한 종류의 배열이 있습니다 (이후 사용자가 변경해야 함). 스크립트가 3 단계 깊이로 만 작동하고 싶지 않으므로 위치 필드 별로이 배열을 정렬 할 수있는 멋진 방법을 찾고 있습니다.

$nav[1]=array(  
  'name'=>'home',  
  'position'=>'2',  
children=>array(

    [1]=array(
    'name'=>'page2',
     position=>'3'),

    [2]=array(
    'name'=>'page3',
    'position'=>'1'),

    [3]=array(
    'name'=>'page4',
    'position'=>'2')
)
$nav[2]=array(
  'name'=>'Second level 1',
  'position'=>'1'
);

문제에 대해 생각해 주셔서 감사합니다.

도움이 되었습니까?

해결책

각각 정렬 children 배열 재귀 적으로. 예를 들어:

function cmp($a, $b)
{
    $ap = intval($a['position']);
    $bp = intval($b['position']);
    if ($ap == $bp) {
        return 0;
    }
    return ($ap < $bp) ? -1 : 1;
}

function sort_menu(&$item)
{
    if ($item['children']) {
        foreach ($item['children'] as &$child) {
            sort_menu($child);
        }
        usort($item['children'], "cmp");
    }
}

$tmp = array('children' => $nav);
sort_menu($tmp);
$nav = $tmp['children'];

다른 팁

다음은 USORT의 예입니다.

function yourSortFunction($a, $b)
{
    if ($a['position'] == $b['position']) {
        return 0;
    }
    return ($a['position'] < $b['position']) ? -1 : 1;
}

usort($nav, "yourSortFunction");'

다른 기능의 재귀로 $ NAV 배열에서 호출 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top