php 无限分类 树形数据 格式化
2017-01-17 17:31
681 查看
测试demo ------------------------------------------------------------------------------------ <?php function genTree($items,$id='id',$pid='pid',$son = 'children'){ $tree = array(); //格式化的树 $tmpMap = array(); //临时扁平数据 foreach ($items as $item) { $tmpMap[$item[$id]] = $item; } foreach ($items as $item) { if (isset($tmpMap[$item[$pid]])) { $tmpMap[$item[$pid]][$son][] = &$tmpMap[$item[$id]]; } else { $tree[] = &$tmpMap[$item[$id]]; } } unset($tmpMap); return $tree; } $items1 = array( array('id' => 1, 'pid' => 0, 'name' => '一级11' ), array('id' => 11, 'pid' => 0, 'name' => '一级12' ), array('id' => 2, 'pid' => 1, 'name' => '二级21' ), array('id' => 10, 'pid' => 11, 'name' => '二级22' ), array('id' => 3, 'pid' => 1, 'name' => '二级23' ), array('id' => 12, 'pid' => 11, 'name' => '二级24' ), array('id' => 9, 'pid' => 1, 'name' => '二级25' ), array('id' => 14, 'pid' => 1, 'name' => '二级26' ), array('id' => 4, 'pid' => 9, 'name' => '三级31' ), array('id' => 6, 'pid' => 9, 'name' => '三级32' ), array('id' => 7, 'pid' => 4, 'name' => '四级41' ), array('id' => 8, 'pid' => 4, 'name' => '四级42' ), array('id' => 5, 'pid' => 4, 'name' => '四级43' ), array('id' => 13, 'pid' => 4, 'name' => '四级44' ), array('id' => 15, 'pid' => 8, 'name' => '五级51' ), array('id' => 16, 'pid' => 8, 'name' => '五级52' ), array('id' => 17, 'pid' => 8, 'name' => '五级53' ), array('id' => 18, 'pid' => 16, 'name' => '六级64' ), ); $time1 = microtime(true); var_dump(genTree($items1)); $time2 = microtime(true); echo "function 时间1:".($time2-$time1); ?> ------------------------------------------------------------------------ 整合TP框架 ------------------------------------------------------------- 控制器端: // 先取出所有的权限 $priModel = D('Privilege'); $data = $priModel->priTree(); $arr = $priModel->genTree($data); 模型端代码: public function priTree(){ $data = $this->select(); return $this->_reSort($data); } #递归对有的分类进行重新排序 public function _reSort($data, $parent_id=0, $level=0){ static $ret = array(); foreach ($data as $k => $v){ if($v['parent_id'] == $parent_id){ // 把level值放到这个分类里,这样就可以知道这个分类是第几级的 $v['level'] = $level; $ret[] = $v; // 再找这个分类的子分类 $this->_reSort($data, $v['id'], $level+1); } } return $ret; } #获取树形结果 public function genTree($items,$id='id',$pid='parent_id',$son = 'children'){ $tree = array(); //格式化的树 $tmpMap = array(); //临时保存数据 foreach ($items as $item) { $tmpMap[$item[$id]] = $item; foreach ($items as $item) { if (isset($tmpMap[$item[$pid]])) { $tmpMap[$item[$pid]][$son][] = &$tmpMap[$item[$id]]; } else { $tree[] = &$tmpMap[$item[$id]]; } } unset($tmpMap); return $tree; }
相关文章推荐
- php不用递归实现无限分类数据的树形格式化
- php 无限分类 树形数据格式化代码
- PHP不用递归实现无限分类数据的树形格式化 5行9行代码修改
- php 无限分类 树形数据 格式化
- 将树形结构的数据转换为二维数组 (续 PHP非递归方式实现无限分类(转载))
- 不用递归实现无限分类数据的树形格式化
- 无限分类数据树形格式化
- 无限分类数据树形格式化
- 不用递归实现无限分类数据的树形格式化
- 5行代码足矣,不用递归实现无限分类数据的树形格式化
- 9行代码,不用递归实现无限分类数据的树形格式化
- 5行代码 不用递归实现无限分类数据的树形格式化
- php 无限分类递归树形
- php 无限分类递归树形(稳定版)
- PHP无限分类(树形类)
- php用数组返回无限分类的列表数据的代码
- PHP无限分类(树形类)
- PHP和MySQL处理树状、分级、无限分类、分层数据的方法
- PHP和MySQL处理树状、分级、无限分类、分层数据的方法