PHP : 필드 별 요소마다 다른 깊이로 다차원 배열을 정렬합니다.
-
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 배열에서 호출 할 수 있습니다.
제휴하지 않습니다 StackOverflow