1 public function list_to_tree($list)
2 {
3 //创建基于主键的数组引用
4 foreach ($list as $key => $data)
5 {
6 $refer[$data['id']]=& $list[$key]; //& 为引用,取出list[$key]的内存地址
7 }
8 //构建三层树 数组
9 foreach ($list as $key => $data)
10 {
11 $pid=$data['pid'];
12 if($pid==0)
13 {
14 $tree[]=& $list[$key]; //没有父节点的情况,取出第一层,放入$tree
15 }
16 else
17 {
18 if(isset($refer[$pid]))
19 {
20 //重点难点。有父节点为二三层,实现的效果就是将其加入父节点之下
21 $parent = & $refer[$pid]; //将其父节点内存地址赋予一个变量名称
22 $parent['_child'][]=& $list[$key]; //在刚刚赋予的变量名称里加入子数组_child
23 }
24 }
25 }
26
27 return $tree;
28 }