有一分类表如下,id 自增,pid父级id,name 分类名称
建表数据
CREATE TABLE `limit_tree` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`pid` int(10) unsigned NOT NULL DEFAULT '0',
`name` varchar(64) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
id | pid | name |
---|---|---|
1 | 0 | 中国 |
2 | 0 | 美国 |
3 | 0 | 日本 |
4 | 1 | 河北省 |
5 | 1 | 山西省 |
6 | 2 | 华盛顿 |
7 | 3 | 广岛 |
8 | 4 | 沧州市 |
9 | 8 | 肃宁县 |
10 | 5 | 运城市 |
11 | 10 | 风陵渡镇 |
取出所有数据
array(
1=>array('id'=>'1','pid'=>'0','name'=>'中国',),
2=>array('id'=>'2','pid'=>'0','name'=>'美国',),
3=>array('id'=>'3','pid'=>'0','name'=>'日本',),
4=>array('id'=>'4','pid'=>'1','name'=>'河北省',),
5=>array('id'=>'5','pid'=>'1','name'=>'山西省',),
6=>array('id'=>'6','pid'=>'2','name'=>'华盛顿',),
7=>array('id'=>'7','pid'=>'3','name'=>'广岛',),
8=>array('id'=>'8','pid'=>'4','name'=>'沧州市',),
9=>array('id'=>'9','pid'=>'8','name'=>'肃宁县',),
10=>array('id'=>'10','pid'=>'5','name'=>'运城市',),
11=>array('id'=>'11','pid'=>'10','name'=>'风陵渡镇',),
)
生成树方法
public static function generateTree(array $arr)
{
$tree = [];
foreach($arr as $row){
if(isset($arr[$row['pid']])){
$arr[$row['pid']]['son'][] = &$arr[$row['id']];
}else{
$tree[] = &$arr[$row['id']];
}
}
return $tree;
}
返回结果
Array
(
[0] => Array
(
[id] => 1
[pid] => 0
[name] => 中国
[son] => Array
(
[0] => Array
(
[id] => 4
[pid] => 1
[name] => 河北省
[son] => Array
(
[0] => Array
(
[id] => 8
[pid] => 4
[name] => 沧州市
)
)
)
[1] => Array
(
[id] => 5
[pid] => 1
[name] => 山西省
[son] => Array
(
[0] => Array
(
[id] => 10
[pid] => 5
[name] => 运城市
[son] => Array
(
[0] => Array
(
[id] => 11
[pid] => 10
[name] => 风陵渡镇
)
)
)
)
)
)
)
[1] => Array
(
[id] => 2
[pid] => 0
[name] => 美国
[son] => Array
(
[0] => Array
(
[id] => 6
[pid] => 2
[name] => 华盛顿
)
)
)
[2] => Array
(
[id] => 3
[pid] => 0
[name] => 日本
[son] => Array
(
[0] => Array
(
[id] => 7
[pid] => 3
[name] => 广岛
)
)
)
)