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 }