> 백엔드 개발 > PHP 튜토리얼 > PHP는 데이터의 계층적 트리 표시를 반복적으로 구현합니다.

PHP는 데이터의 계층적 트리 표시를 반복적으로 구현합니다.

巴扎黑
풀어 주다: 2016-11-23 13:13:36
원래의
1468명이 탐색했습니다.

<?php
$db = mysql_connect(&#39;localhost&#39;, &#39;root&#39;, &#39;root&#39;) or die(&#39;Can\&#39;t connect to database&#39;);
mysql_select_db(&#39;test&#39;) or die(&#39;Can\&#39;t find database : test&#39;);
$result = mysql_query(&#39;select id, fid, name from tree&#39;);
while($arr = mysql_fetch_array($result)){
    $data[] = array(
        &#39;id&#39; => $arr[&#39;id&#39;], 
        &#39;fid&#39; => $arr[&#39;fid&#39;],
        &#39;name&#39; => $arr[&#39;name&#39;], 
    );
}
// 将数据按照缩进简单排列 见图1
function data2arr($tree, $rootId = 0, $level = 0) {
    foreach($tree as $leaf) {
        if($leaf[&#39;fid&#39;] == $rootId) {
            echo str_repeat(&#39;    &#39;, $level) . $leaf[&#39;id&#39;] . &#39; &#39; . $leaf[&#39;name&#39;] . &#39;<br/>&#39;;
            foreach($tree as $l) {
                if($l[&#39;fid&#39;] == $leaf[&#39;id&#39;]) {
                    data2arr($tree, $leaf[&#39;id&#39;], $level + 1);
                    break;
                }
            }
        }
    }
}
data2arr($data);
echo &#39;<br/>-----------------------------------------------------------------------<br/>&#39;;
// 将数据按照所属关系封装 见图2
function arr2tree($tree, $rootId = 0) {
    $return = array();
    foreach($tree as $leaf) {
        if($leaf[&#39;fid&#39;] == $rootId) {
            foreach($tree as $subleaf) {
                if($subleaf[&#39;fid&#39;] == $leaf[&#39;id&#39;]) {
                    $leaf[&#39;children&#39;] = arr2tree($tree, $leaf[&#39;id&#39;]);
                    break;
                }
            }
            $return[] = $leaf;
        }
    }
    return $return;
}
$tree = arr2tree($data);
print_r($tree);
echo &#39;<br/>-----------------------------------------------------------------------<br/>&#39;;
// 将数据使用HTML再次展现 见图3
function tree2html($tree) {
    echo &#39;<ul>&#39;;
    foreach($tree as $leaf) {
        echo &#39;<li>&#39; .$leaf[&#39;name&#39;];
        if(! empty($leaf[&#39;children&#39;])) tree2html($leaf[&#39;children&#39;]);
        echo &#39;</li>&#39;;
    }
    echo &#39;</ul>&#39;;
}
tree2html($tree);
로그인 후 복사

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