First create a data table and add some data
<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>
First create a data table and add some data
<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