728x90

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;
}

블로그 이미지

Link2Me

,