<?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 $key => $item) {
if (isset($tmpMap[$item[$pid]])) {
$tmpMap[$item[$pid]][$son][$key] = &$tmpMap[$key];
} else {
$tree[] = &$tmpMap[$item[$id]];
}
}
unset($tmpMap);
return $tree;
} $items1 = array(
array('id' => 1, 'pid' => 0, 'name' => '一级' ),
array('id' => 11, 'pid' => 0, 'name' => '一级' ),
array('id' => 2, 'pid' => 1, 'name' => '二级' ),
array('id' => 10, 'pid' => 11, 'name' => '二级' ),
array('id' => 3, 'pid' => 1, 'name' => '二级' ),
array('id' => 12, 'pid' => 11, 'name' => '二级' ),
array('id' => 9, 'pid' => 1, 'name' => '二级' ),
array('id' => 14, 'pid' => 1, 'name' => '二级' ),
array('id' => 4, 'pid' => 9, 'name' => '三级' ),
array('id' => 6, 'pid' => 9, 'name' => '三级' ),
array('id' => 7, 'pid' => 4, 'name' => '四级' ),
array('id' => 8, 'pid' => 4, 'name' => '四级' ),
array('id' => 5, 'pid' => 4, 'name' => '四级' ),
array('id' => 13, 'pid' => 4, 'name' => '四级' ),
array('id' => 15, 'pid' => 8, 'name' => '五级' ),
array('id' => 16, 'pid' => 8, 'name' => '五级' ),
array('id' => 17, 'pid' => 8, 'name' => '五级' ),
array('id' => 18, 'pid' => 16, 'name' => '六级' ),
);
echo "<pre>";
echo "父节点:<br/>";
print_r(genTree($items1));

  

<?php
header("Content-type:text/html;charSet=utf8");
/**
* 创建父节点树形数组
* 参数
* $ar 数组,邻接列表方式组织的数据
* $id 数组中作为主键的下标或关联键名
* $pid 数组中作为父键的下标或关联键名
* 返回 多维数组
**/
function find_parent($ar, $id='id', $pid='pid') {
foreach($ar as $v) $t[$v[$id]] = $v;
foreach ($t as $k => $item){
if( $item[$pid] ){
if( ! isset($t[$item[$pid]]['parent'][$item[$pid]]) )
$t[$item[$id]]['parent'][$item[$pid]] = &$t[$item[$pid]];
}
}
return $t;
} /**
* 创建子节点树形数组
* 参数
* $ar 数组,邻接列表方式组织的数据
* $id 数组中作为主键的下标或关联键名
* $pid 数组中作为父键的下标或关联键名
* 返回 多维数组
**/
function find_child($ar, $id='id', $pid='pid') {
foreach($ar as $v) $t[$v[$id]] = $v;
foreach ($t as $k => $item){
if( $item[$pid] ) {
$t[$item[$pid]]['child'][$item[$id]] = &$t[$k];
}
}
return $t;
} $data = array(
array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),
array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父亲'),
array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'),
array('ID'=>4, 'PARENT'=>2, 'NAME'=>'自己'),
array('ID'=>5, 'PARENT'=>4, 'NAME'=>'儿子'),
); $p = find_parent($data, 'ID', 'PARENT');
$c = find_child($data, 'ID', 'PARENT');
echo "<pre>";
echo "父节点:<br/>";
print_r($p);
echo "子节点:<br/>";
print_r($c);

  

php 无限分类的更多相关文章

  1. 后台树状菜单,js实现递归无限分类

    //新闻类别管理 public function new_classify() { $arr = M('news_classify')->where("fid = 0")-& ...

  2. MySql无限分类数据结构--预排序遍历树算法

    MySql无限分类数据结构--预排序遍历树算法 无限分类是我们开发中非常常见的应用,像论坛的的版块,CMS的类别,应用的地方特别多. 我们最常见最简单的方法就是在MySql里ID ,parentID, ...

  3. TreeView递归绑定无限分类数据

    TreeView递归绑定无限分类数据 实现一个动态绑定,无限级分类数据时,需要将数据绑定到TreeView控件,分类表的结构是这样的: 字段 类型 Id int ParentId int Name N ...

  4. 关于无限分类的树状输出(id,name,pid)类型的

    首先创建无限分类的数据表,我这里采用的是id.name.pid这种类型(当然还有很多种无限分类的方式了,比如:id.name.pid.path.left.right左右节点的形式) CREATE TA ...

  5. php递归方法实现无限分类实例

    数组:  代码如下 复制代码 $items = array( array('id' => 1, 'pid' => 0, 'name' => '一级11' ), array('id' ...

  6. PHP+Mysql无限分类的方法汇总

    无限分类是个老话题了,来看看PHP结合Mysql如何实现.第一种方法这种方法是很常见.很传统的一种,先看表结构表:categoryid int 主键,自增name varchar 分类名称pid in ...

  7. PHP全路径无限分类导航LINK代码实现

    <?php /** * @param php全路径无限分类 */ include('db.inc.php'); function getPathCate($cateid){ $sql = &qu ...

  8. PHP全路径无限分类原理

    全路径无限分类:以一个字段把他所有的父级id按顺序记录下来以此实现的无限分类叫做全路径无限分类 优点:查询方便 缺点:增加,移动分类时数据维护时稍微复杂.

  9. PHP无限分类分类导航LINK的代码实现

    1. 代码数据库的结构: 2.要达到的效果 /** * @param php无限分类分类导航LINK的代码实现 */ include('db.inc.php'); function getCatePa ...

  10. php三种无限分类

    无限分类,是指从一个最高分类开始,每个子分类都可以分出自己的若干个子分类,可以一直分下去,称为无限级分类: 下面是对省市县的无限极分类的列子.数据库如图: 代码示例如下: /** * @Descrip ...

随机推荐

  1. Android 贝塞尔曲线解析

    相信很多同学都知道"贝塞尔曲线"这个词,我们在很多地方都能经常看到.利用"贝塞尔曲线"可以做出很多好看的UI效果,本篇博客就让我们一起学习"贝塞尔曲线 ...

  2. ss-libev 源码解析udp篇 (1)

    shadowsocks-libev udp转发原理简介 ss_local作为一个sock5服务器,接收来自socks5客户端的数据包.在ss_local启动后,即创建一个udp socket,并bin ...

  3. XCOde 5 的界面布局一些新特性

    1.问题 •在iOS程序中,大部分视图控制器都包含了大量的代码用于设置UI布局,设置控件的水平或垂直位置,以确保组件在不同版本的iOS中都能得到合理的布局 •甚至有些程序员希望在不同的设备使用相同的视 ...

  4. Javascrpt 速成篇】 二:js面向对象

    现实世界的对象由形态和行为组成,js中对应的是属性和函数. <!DOCTYPE html> <html> <head> <meta charset=" ...

  5. 动态样式语言Sass&Less介绍与区别

    一. Sass/Scss&Less是什么? Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,语法跟css一样(但多了些功能),比css好写, ...

  6. Jmeter查看结果树

    取样结果: Thread Name: test 1-2                                                     线程名称:测试1 - 2Sample S ...

  7. TLS支持版本检测

    今天有开发同事询问“生产环境的TLS版本是多少”,这个问题还真没太关注过,首先想到的是通过Chrome浏览器的开发者工具查看一下,访问https页面查看如下: 这太概是说使用了TLS1.2,于是截图给 ...

  8. java面试题08

    1.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? short s1 = 1; s1 = s1 + 1;编译时错误.对于shor ...

  9. MQ 发布/订阅者模式

    package com.chauvet.utils.mq.topic; import javax.jms.DeliveryMode; import javax.jms.JMSException; im ...

  10. python mysql基本操作

    1.创建数据库.表添加数据. # -*- coding: utf-8 -*- import MySQLdb.cursors conn =MySQLdb.connect(',charset = 'utf ...