Heim >Backend-Entwicklung >PHP-Tutorial >PHP implementiert rekursiv die hierarchische Baumdarstellung von Daten. Bitte teilen Sie mir Ihre Meinung mit und sehen Sie, wie mein Text verläuft.
Erstellen Sie zunächst eine Datentabelle und fügen Sie einige Daten hinzu
<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>
Erstellen Sie zunächst eine Datentabelle und fügen Sie einige Daten hinzu
<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