各种无限分类树结构方法收集
来源:互联网 发布:apache shirt session 编辑:程序博客网 时间:2024/04/30 15:12
header('Content-Type:text/html;charset=utf-8');set_time_limit(0);$rows = array(array('id' => 1,'pid' => 0,'name' => '1',),array('id' => 2,'pid' => 1,'name' => '1-2',),// array('id' => 3,'pid' => 0,'name' => '3',),array('id' => 4,'pid' => 0,'name' => '4',),array('id' => 5,'pid' => 1,'name' => '1-5',),array('id' => 6,'pid' => 0,'name' => '6',),array('id' => 7,'pid' => 3,'name' => '3-7',),array('id' => 8,'pid' => 2,'name' => '1-2-8',),array('id' => 9,'pid' => 8,'name' => '1-2-8-9',),array('id' => 10,'pid' => 9,'name' => '1-2-8-10',),array('id' => 11,'pid' => 7,'name' => '3-7-11',),array('id' => 12,'pid' => 3,'name' => '3-12',),);$rows_map = array();foreach ($rows as $val) {// $rows_map[$val['id']] = array_merge($val,array('id'=>$val['id'],'pid'=>$val['pid']));//构建指定键名的关联数组$rows_map[$val['id']] = $val;}// var_dump(genTree5($rows_map));// var_dump(genTree9($rows_map));// var_dump(treeUseRecursive($rows));// output_level($tree);$tree = getDataTree($rows);var_dump($tree);showCategory($rows);die;/** 参数为关联数组,利用引用变量实现数组树,结果为索引数组,找不到父类直接忽略*/function getDataTree($rows, $id = 'id', $pid = 'pid', $child = 'son', $root = 0) {$tree = array();if (is_array($rows)) {$array = array ();foreach($rows as $key => $item) {$array[$item[$id]] = &$rows[$key];}foreach($rows as $key => $item) {$pid_val = $item[$pid];if($root == $pid_val) {$tree [] = &$rows [$key];} else {if (isset($array[$pid_val])) {$parent = &$array[$pid_val];$parent[$child][] = &$rows[$key];}}}}return $tree;}/** * 参数为关联数组 结果数组键名为id,构建pid为键的树,取顶层(0)下面的数据 * 此方法由@Tonton 提供 * @form http://levi.cg.am * @date 2012-12-12 */function genTree5(array $items) {foreach ($items as $item)$items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];//父类id为键,当前分类引用为值return isset($items[0]['son']) ? $items[0]['son'] : array();//仅取顶层}/** * 参数为关联数组 结果为索引数组,找不到父类会放至顶层 * @author Xuefen.Tong * @form http://levi.cg.am * @param array $items * @return array */function genTree9(Array $items) {$tree = array(); //格式化好的树foreach ($items as $item)if (isset($items[$item['pid']]))$items[$item['pid']]['son'][] = &$items[$item['id']];else$tree[] = &$items[$item['id']];return $tree;}/** 递归树 参数为关联数组, 索引数组即可 找不到父类直接忽略*/function treeUseRecursive($list,$pid=0) {$tree = array();foreach ($list as $key => $val) {if($val['pid']==$pid) {unset($list[$key]);$son = treeUseRecursive($list,$val['id']);if($son) $val['son'] = $son;$tree[] = $val;}}return $tree;}/** 递归设置层级、输出 */function output_level($rows,$level=0,$level_str=' ',$child='child') {foreach ($rows as $val) {echo str_repeat($level_str, $level), $val['id'], '.', $val['name'],"({$level})<br/>\n";if(isset($val[$child])) output_level($val[$child], $level+1);}}/** 先构建父类id做索引,子项为值的数组,再利用递归输出层级结构树 */function showCategory($array) {$tree = array ();if ($array) {foreach ( $array as $v ) {$pid = $v ['pid'];$list = @$tree [$pid] ? $tree [$pid] : array ();array_push ( $list, $v );$tree [$pid] = $list;}}// 遍历输出根分类foreach ( $tree [0] as $k => $v ) {echo "$v[name]<br />";// 遍历输出根分类相应的子分类if (@$tree [$v ['id']]) {drawTree ( $tree [$v ['id']], $tree, 0 );}echo "<div style='height:10px;'></div>";}}function drawTree($arr, $tree, $level) {$level ++;$prefix = str_pad ( "|", $level + 1, '-', STR_PAD_RIGHT );foreach ( $arr as $k2 => $v2 ) {echo "$prefix$v2[name]<br />";if (isset ( $tree [$v2 ['id']] )) {drawTree ( $tree [$v2 ['id']], $tree, $level );}}}
0 0
- 各种无限分类树结构方法收集
- 无限分类树结构tree
- 无限级分类,树形结构
- 无限级分类 datagrid (实现树型结构)
- asp+ajax无限级分类树型结构
- ThinkPHP3.2.3创建无限极分类树型结构
- 递归 ---无限极分类中递归查找一个树结构
- 树分类,无限极分类
- 无限极分类 简单方法
- 通用无限分类的方法
- 无限极分类的方法
- 无限分类树--Treeview
- Yii 无限分类树
- 无限分类的ASP实现方法
- PHP无限级分类简单实现方法
- PHP无限级分类方法及代码
- PHP无限级分类方法及代码
- 用递归的方法实现无限分类
- android studio安装问题
- Java排序算法:入门篇
- 此时,此地
- 【2】TOEFL 二战全回顾 150307
- 如何在嵌入式平台对大文件里的数据进行排序
- 各种无限分类树结构方法收集
- python模拟登录新浪微博
- [COGS371]亲和数解题报告
- 真相(truth)最可怕的敌人不是谎言(lie),而是神话(myth)---《唐浩明点评曾国藩家书》书评
- IOS多线程编程一:概述
- 用我的爱成全你的碧海蓝天
- copy list with random pointer
- NYOJ---19擅长排列的小明
- 初识Git,如何利用Git将代码托管到GitHub上