array, sub array 등 다차원 배열을 단순화 시키는 경우가 필요하다.
아래 코드와 같이 편법(?) 처리하였다.
SQL 문으로 처리하는 걸 검색해보니 해결하기가 너무 어렵다.
오라클은 쉽게 제공하는 기능이 있는데 MySQL은 너무 복잡하다.
$c = new LoginClass;
$rows = $c -> getDbData('menu_items', '', '*');
foreach ($rows as $row) {
$TreeMenu[] = $row;
}
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($c->TreeSQL($TreeMenu)));
$c->TableTruncate('menu_treesort'); // 테이블 비우기
$i=0;
foreach($it as $k=>$v) {
$key = '_id';
$val = "$v";
$c->getDbInsert('menu_treesort', $key, $val);
$i++;
}
$c->getDbUpdate('menu_items m join menu_treesort s on m.id=s._id', "sort=s.idx", NULL,'');
echo $i.'개 Data inserted';
TreeSQL 함수
이 함수가 TreeView Sort 의 핵심이다.
function TreeSQL($array, $parent_id = 0, $parents = array()) {
if ($parent_id == 0) {
foreach ($array as $element) {
if (($element['parent_id'] != 0) && !in_array($element['parent_id'], $parents)) {
$parents[] = $element['parent_id'];
}
}
}
$R = array();
foreach ($array as $element) {
if ($element['parent_id'] == $parent_id) {
if (in_array($element['id'], $parents)) {
array_push($R,$element['id']);
array_push($R, TreeSQL($array, $element['id'], $parents));
} else {
array_push($R,$element['id']);
}
}
}
return $R;
}
'Web 프로그램 > 메뉴 만들기' 카테고리의 다른 글
DIV 높이 자동 인식 (0) | 2018.04.28 |
---|---|
메뉴 가로 정렬과 세로정렬 (0) | 2018.04.24 |
[bootstrap] PHP/MySQL 과 연동한 부트스트랩 메뉴 만들기 (2) | 2017.02.15 |
[bootstrap] Multi level dropdown menu (0) | 2017.02.13 |
[bootstrap] navbar-fixed-top 설정때문에 (0) | 2017.02.07 |