读取树状数据的方法

xuzuning 2013-02-04 11:46:06
加精
读取树状数据的方法
一般在读取用“邻接列表算法”组织的数据时,需要使用递归逐层读取
或者读取数据到数组,然后用递归或非递归的方法再行处理
这里介绍一种边读边生成“树状”数组的方法,希望对你有用
mysql_connect();

//测试数据
$sql =<<< SQL
select * from (
select '1' as id, '0' as pid, 'Food' as title
union all select '2', '1', 'Fruit'
union all select '3', '2', 'Red'
union all select '4', '3', 'Cherry'
union all select '5', '2', 'Yellow'
union all select '6', '5', 'Banana'
union all select '7', '1', 'Meat'
union all select '8', '7', 'Beef'
union all select '9', '7', 'Pork'
) t
order by pid, id
SQL;

$rs = mysql_query($sql);

$res = array(); //结果数组
$ind = array(); //索引数组
while($row = mysql_fetch_assoc($rs)) {
list($id, $pid) = array_values($row);
$ind[$id] = $row;
if(isset($ind[$pid])) $ind[$pid]['child'][$id] =& $ind[$id]; //构造索引
if($pid == 0) $res[$id] =& $ind[$id]; //转存根节点组
}

echo '<xmp>' . print_r($res, 1);
Array
(
[1] => Array
(
[id] => 1
[pid] => 0
[title] => Food
[child] => Array
(
[2] => Array
(
[id] => 2
[pid] => 1
[title] => Fruit
[child] => Array
(
[3] => Array
(
[id] => 3
[pid] => 2
[title] => Red
[child] => Array
(
[4] => Array
(
[id] => 4
[pid] => 3
[title] => Cherry
)

)

)

[5] => Array
(
[id] => 5
[pid] => 2
[title] => Yellow
[child] => Array
(
[6] => Array
(
[id] => 6
[pid] => 5
[title] => Banana
)

)

)

)

)

[7] => Array
(
[id] => 7
[pid] => 1
[title] => Meat
[child] => Array
(
[8] => Array
(
[id] => 8
[pid] => 7
[title] => Beef
)

[9] => Array
(
[id] => 9
[pid] => 7
[title] => Pork
)

)

)

)

)

)
...全文
15862 96 打赏 收藏 转发到动态 举报
写回复
用AI写文章
96 条回复
切换为时间正序
请发表友善的回复…
发表回复
beatyou385981202 2014-12-02
  • 打赏
  • 举报
回复
mark
龙在唐朝 2014-07-30
  • 打赏
  • 举报
回复
学习,谢谢楼主分享
际遇_ 2013-06-21
  • 打赏
  • 举报
回复
好东西,冗余低,代码简洁!!!!感谢分享~~~
际遇_ 2013-06-21
  • 打赏
  • 举报
回复
其实这个是把递归的方法转化为迭代查询来解决是这样理解吗?
ywq0127 2013-06-06
  • 打赏
  • 举报
回复
修改版 http://bbs.csdn.net/topics/390481676
ywq0127 2013-06-05
  • 打赏
  • 举报
回复
大家写程序的,能不能都严谨一点,都没一个人去测试。 用下面这个数组去检测一下: 数据结构: 14 |---12 |---13 |---10 |---11

$arr = array(
    array(
        'id'=>10,
        'pid'=>13,
    ),
    array(
        'id'=>11,
        'pid'=>13,
    ),
    array(
        'id'=>12,
        'pid'=>14,
    ),
    array(
        'id'=>13,
        'pid'=>14,
    ),
    array(
        'id'=>14,
        'pid'=>0,
    ),
);
实际值肯定不是那样的。 这种方法必须要严格按照 父数据在子数据之前 的格式。 解决办法思考ing。。。
wangmineasy 2013-05-31
  • 打赏
  • 举报
回复
后面的没分?
梦康 2013-05-23
  • 打赏
  • 举报
回复
研究了两天,获益匪浅啊!
梦康 2013-05-22
  • 打赏
  • 举报
回复
晕,说的就是我么。。。我刚刚问了这个问题。。。。
astarblog 2013-05-16
  • 打赏
  • 举报
回复
刚学了两个月,但没看懂
wpj590246 2013-05-16
  • 打赏
  • 举报
回复
这引用用的好啊
joywto 2013-05-09
  • 打赏
  • 举报
回复
www.npsjw.com帮看下什么问题
屌丝码农 2013-05-03
  • 打赏
  • 举报
回复
引用 7 楼 natici 的回复:
=& 这个是运算符?
这就是个引用而已。。
屌丝码农 2013-05-03
  • 打赏
  • 举报
回复
多看几遍就能体会到了
年华似水118 2013-05-02
  • 打赏
  • 举报
回复
感谢版主
随行的太阳 2013-04-27
  • 打赏
  • 举报
回复
zilong 2013-04-19
  • 打赏
  • 举报
回复
顶 版主!!!!
iefinbba 2013-04-18
  • 打赏
  • 举报
回复
不错的思路,学习了
u010324010 2013-04-16
  • 打赏
  • 举报
回复
莫测,
wang8223538 2013-04-05
  • 打赏
  • 举报
回复
高深!
加载更多回复(69)
为什么要学习这门课程?·新一代流式数据湖技术组件深入讲解,帮助你快速构造数据湖知识体系。·为构建湖仓一体架构提供底层技术支撑。本课程将从原理、架构、底层存储细节、性能优化、管理等层面对Paimon流式数据湖组件进行详细讲解,原理+实战,帮助你快速上手使用数据湖技术。讲师介绍华为HCIP认证大数据高级工程师北京猎豹移动大数据技术专家中科院大数据研究院大数据技术专家51CTO企业IT学院优秀讲师电子工业出版社2022年度优秀作者出版书籍:《Flink入门与实战》、《大数据技术及架构图解实战派》。本课程提供配套课件、软件、试题、以及源码。课程内容介绍:1、什么是Apache Paimon2、Paimon的整体架构3、Paimon的核心特点4、Paimon支持的生态5、基于Flink SQL操作Paimon6、基于Flink DataStream API 操作Paimon7、Paimon中的内部表和外部表8、Paimon中的分区表和临时表9、Paimon中的Primary Key表(主键表)10、Paimon中的Append Only表(仅追加表)11、Changelog Producers原理及案例实战12、Merge Engines原理及案例实战13、Paimon中的Catalog详解14、Paimon中的Table详解15、Paimon之Hive Catalog的使用16、动态修改Paimon表属性17、查询Paimon系统表18、批量读取Paimon表19、流式读取Paimon表20、流式读取高级特性Consumer ID21、Paimon CDC数据摄取功能22、CDC之MySQL数据同步到Paimon23、CDC之Kafka数据同步到Paimon24、CDC高级特性之Schema模式演变25、CDC高级特性之计算列26、CDC高级特性之特殊的数据类型映射27、CDC高级特性之中文乱码28、Hive引擎集成Paimon29、在Hive中配置Paimon依赖30、在Hive中读写Paimon表31、在Hive中创建Paimon表32、Hive和Paimon数据类型映射关系33、Paimon底层文件基本概念34、Paimon底层文件布局35、Paimon底层文件操作详解36、Flink流式写入Paimon表过程分析37、读写性能优化详细分析38、Paimon中快照、分区、小文件的管理39、管理标签(自动管理+手工管理)40、管理Bucket(创建+删除+回滚)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧