PHP의 참조 구현 트리 생성 방법

墨辰丷
풀어 주다: 2023-03-31 12:42:01
원래의
2396명이 탐색했습니다.

이 글은 주로 PHP에서 참조 구현 트리를 생성하는 방법을 소개합니다. 관심 있는 친구들이 참고하면 도움이 될 것입니다.

시간과 메모리를 낭비하는 인피니투스 분류의 재귀 순회를 아직도 사용하고 계신가요? 이 글을 읽고 나면 바꿔야겠다는 생각이 듭니다.

OSChina에서 본 매우 간결한 PHP Infinitus 분류 스패닝 트리 방식입니다. 우연히 인용해서 공유해봤습니다.

코드는 다음과 같습니다.

function generateTree($items){
    $tree = array();
    foreach($items as $item){
        if(isset($items[$item['pid']])){
            $items[$item['pid']]['son'][] = &$items[$item['id']];
        }else{
            $tree[] = &$items[$item['id']];
        }
    }
    return $tree;
}
$items = array(
    1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
    2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
    3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
    4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),
    5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),
);
print_r(generateTree($items));
로그인 후 복사

아래에서 인쇄된 결과를 볼 수 있습니다.

코드는 다음과 같습니다.

Array
(
    [0] => Array
        (
            [id] => 1
            [pid] => 0
            [name] => 安徽省
            [son] => Array
                (
                    [0] => Array
                        (
                            [id] => 3
                            [pid] => 1
                            [name] => 合肥市
                            [son] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 4
                                            [pid] => 3
                                            [name] => 长丰县
                                        )
 
                                )
 
                        )
 
                    [1] => Array
                        (
                            [id] => 5
                            [pid] => 1
                            [name] => 安庆市
                        )
 
                )
 
        )
 
    [1] => Array
        (
            [id] => 2
            [pid] => 0
            [name] => 浙江省
        )
 
)
로그인 후 복사


위 스패닝 트리 방법도 5줄로 단순화할 수 있습니다.

코드는 다음과 같습니다.

function generateTree($items){
    foreach($items as $item)
        $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
    return isset($items[0]['son']) ? $items[0]['son'] : array();
}
로그인 후 복사

위의 무한 분류 데이터 트리 구조화 방법은 배울 가치가 있습니다. 하지만 이 코드의 실제 용도는 명확하지 않다고 생각합니다. 형식화된 트리 데이터를 꺼내려면 여전히 재귀를 수행해야 합니다.

코드는 다음과 같습니다.

/**
 * 如何取数据格式化的树形数据
 */
$tree = generateTree($items);
function getTreeData($tree){
    foreach($tree as $t){
        echo $t[&#39;name&#39;].&#39;<br>&#39;;
        if(isset($t[&#39;son&#39;])){
            getTreeData($t[&#39;son&#39;]);
        }
    }
}
getTreeData($tree);
로그인 후 복사

요약: 위 내용은 전체입니다. 이 글의 내용이 모든 분들의 공부에 도움이 되기를 바랍니다.

관련 권장 사항:

php에서 지속성 레이어를 구현하는 방법

php에서 파일 MIME 유형을 가져오는 방법

PHP를 사용하여 데이터베이스를 작동하여 테이블이 존재하는지 확인하는 방법

위 내용은 PHP의 참조 구현 트리 생성 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!