>백엔드 개발 >PHP 튜토리얼 >PHP는 트리 구조 정보를 효율적으로 얻습니다.

PHP는 트리 구조 정보를 효율적으로 얻습니다.

巴扎黑
巴扎黑원래의
2016-11-23 15:46:351211검색

개발 중에는 제품의 다단계 분류, 다단계 탐색 모음 메뉴 등과 같은 간단한 트리 구조가 저장되는 경우가 많습니다. 이러한 개체의 한 가지 특징은 일반적으로 전체 트리 구조를 얻는다는 것입니다. 데이터베이스에 트리 구조를 저장하는 세 가지 주요 방법이 있습니다. 가장 간단한 방법은 father_id를 통해 현재 구조의 상위 노드를 가리키는 것입니다. 이러한 작은 구조의 경우 일반적으로 가장 간단한 저장 방법을 사용합니다.
전체 트리 구조를 얻고 싶을 때 인터넷에서 일반적으로 사용되는 재귀적 방법은 코드가 간단하고 이해하기 쉽지만, 여러 개의 데이터베이스 쿼리가 필요하고, 쿼리 횟수가 많다는 단점이 있습니다. 다음 몇 번에 걸쳐 얻은 요소는 매우 작거나 심지어 0이므로 비효율적입니다. 매우 열악합니다.
실제로 이런 상황이 발생하면 데이터베이스에서 모든 요소를 ​​가져온 다음, 얻은 father_id 요소를 기반으로 트리 구조를 구축하면 여러 데이터베이스 쿼리를 실행할 때 발생하는 성능 손실을 해결할 수 있습니다. 다음은 실제 프로젝트에서 다단계 네비게이션 바 메뉴를 얻기 위해 사용한 함수에 대한 참고자료입니다

/*
通过数据库获取所有元素,通过下面函数构造树形结构
*/
private function getTree($menus)
{
    $id = $level = 0;
$menuobjs=array();
    $tree = array();
$notrootmenu=array();
    foreach($menus as $menu){
       $menuobj=new stdClass();
$menuobj->menu=$menu;
    $id = $menu['id'];
$level = $menu['father_id'];
$menuobj->nodes = array();
$menuobjs[$id]=$menuobj;
if ($level) {
$notrootmenu[]=$menuobj;
} else {
$tree[] = $menuobj;
}
    }
foreach($notrootmenu as $menuobj){
$menu=$menuobj->menu;
$id = $menu['id'];
$level = $menu['father_id'];
$menuobjs[$level]->nodes[]=$menuobj;
}
    return $tree;
    }
}


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.