首頁  >  文章  >  後端開發  >  php遞歸實現層級樹狀展現數據,大家給點意見,看看我寫的怎麼樣

php遞歸實現層級樹狀展現數據,大家給點意見,看看我寫的怎麼樣

WBOY
WBOY原創
2016-08-04 09:22:041031瀏覽

先建立資料表並加入一些資料

<code class="sql">CREATE TABLE IF NOT EXISTS category ( 
categoryId smallint(5) unsigned NOT NULL AUTO_INCREMENT, 
parentId smallint(5) unsigned NOT NULL DEFAULT '0', 
categoryName varchar(50) NOT NULL, 
PRIMARY KEY (categoryId) 
) ;
INSERT INTO category (categoryId, parentId, categoryName) VALUES
(1, 0, 'php'), 
(2, 0, 'java'), 
(3, 0, 'c/c++'), 
(4, 1, 'php基础'), 
(5, 1, 'php开源资料'), 
(6, 1, 'php框架'), 
(7, 2, 'java Se'), 
(8, 2, 'java EE'), 
(9, 2, 'java Me'), 
(10, 3, 'c/c++基础编程'), 
(11, 3, 'c/c++系统开发'), 
(12, 3, 'c嵌入式编程'), 
(13, 3, 'c++应用开发'), 
(14, 13, 'c++桌面应用开发'), 
(15, 13, 'c++游戏开发');</code>
<code>/**
 *递归实现层级树状展现数据
 *$tree为二位数组,
 *$depth为树的最大深度,0表示不设置深度
 *$rootId表示父级分类的ID
 *$level记录层级树的层数
**/
function arr2tree($tree,$depth,$rootId = 0,$level=1) {  
    $return = array();  
    foreach($tree as $leaf) {  
        if($leaf['parentId'] == $rootId) {
            $leaf['level'] = $level;
            foreach($tree as $subleaf) {  
                if($subleaf['parentId'] == $leaf['categoryId'] && ($depth?$level<$depth:1)) {  
                    $leaf['children'] = arr2tree($tree,$depth,$leaf['categoryId'],$level+1);
                    $level=1;
                    break;  
                }  
            }  
            $return[] = $leaf;  
        }  
    }
    return $return;  
}  

$tree = arr2tree($category,0);
$tree1 = arr2tree($category,2);
echo "<pre class="brush:php;toolbar:false">";
print_r($tree);
print_r($tree1);</code>

回覆內容:

先建立資料表並加入一些資料

<code class="sql">CREATE TABLE IF NOT EXISTS category ( 
categoryId smallint(5) unsigned NOT NULL AUTO_INCREMENT, 
parentId smallint(5) unsigned NOT NULL DEFAULT '0', 
categoryName varchar(50) NOT NULL, 
PRIMARY KEY (categoryId) 
) ;
INSERT INTO category (categoryId, parentId, categoryName) VALUES
(1, 0, 'php'), 
(2, 0, 'java'), 
(3, 0, 'c/c++'), 
(4, 1, 'php基础'), 
(5, 1, 'php开源资料'), 
(6, 1, 'php框架'), 
(7, 2, 'java Se'), 
(8, 2, 'java EE'), 
(9, 2, 'java Me'), 
(10, 3, 'c/c++基础编程'), 
(11, 3, 'c/c++系统开发'), 
(12, 3, 'c嵌入式编程'), 
(13, 3, 'c++应用开发'), 
(14, 13, 'c++桌面应用开发'), 
(15, 13, 'c++游戏开发');</code>
<code>/**
 *递归实现层级树状展现数据
 *$tree为二位数组,
 *$depth为树的最大深度,0表示不设置深度
 *$rootId表示父级分类的ID
 *$level记录层级树的层数
**/
function arr2tree($tree,$depth,$rootId = 0,$level=1) {  
    $return = array();  
    foreach($tree as $leaf) {  
        if($leaf['parentId'] == $rootId) {
            $leaf['level'] = $level;
            foreach($tree as $subleaf) {  
                if($subleaf['parentId'] == $leaf['categoryId'] && ($depth?$level<$depth:1)) {  
                    $leaf['children'] = arr2tree($tree,$depth,$leaf['categoryId'],$level+1);
                    $level=1;
                    break;  
                }  
            }  
            $return[] = $leaf;  
        }  
    }
    return $return;  
}  

$tree = arr2tree($category,0);
$tree1 = arr2tree($category,2);
echo "<pre class="brush:php;toolbar:false">";
print_r($tree);
print_r($tree1);</code>

http://stackoverflow.com/questions/4196157/create-array-tree-from-array-list

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn