如何将数据库结果转换为分层数组对象?

Barbara Streisand
发布: 2024-11-06 17:04:03
原创
649 人浏览过

How to Convert Database Results into Hierarchical Array Objects?

将数据库结果转换为分层数组对象

实现基于闭包表的层次结构

要有效地表示分层数据,请考虑使用闭包表。在这种情况下,闭包表维护树结构的祖先和后代之间的关系,从而可以有效地检索和表示层次结构。

查询分层数据

要查询树结构,我们可以执行 SQL 查询来检索给定节点的后代及其在层次结构中的级别。下面是一个检索指定级别的后代的示例查询:

SELECT d.*, p.a AS '_parent'
FROM longnames AS a
JOIN closure AS c ON (c.a = a.tsn)
JOIN longnames AS d ON (c.d = d.tsn)
LEFT OUTER JOIN closure AS p ON (p.d = d.tsn AND p.l = 1)
WHERE a.tsn = ? AND c.l <= ?
ORDER BY c.l;
登录后复制

处理查询结果

检索到查询结果后,我们可以处理它们以创建分层数组结构。这涉及按层次结构对行进行排序并相应地对它们进行分组,创建一个包含节点作为对象的数组,其中包含数据和子数组。

自定义行对象

为了增强数组结构,我们可以创建自定义 Row 对象,包含行数据的关联数组及其子项的 Rowset 对象。叶节点的子行集为空。

toArrayDeep() 方法

自定义类还可以包含 toArrayDeep() 等方法,将其数据内容递归地转换为普通数组,从而轻松导出数据.

使用示例

要使用此系统,可以首先获取分类表数据网关的实例,然后获取所需的树结构:

// Get an instance of the taxonomy table data gateway
$tax = new Taxonomy();

// Query tree starting at Rodentia (id 180130), to a depth of 2
$tree = $tax->fetchTree(180130, 2);

// Dump out the array
var_export($tree->toArrayDeep());
登录后复制

其他注意

要确定每个路径的深度,您可以将新节点插入到 Closure 表中,根据它们在层次结构中的添加位置计算适当的级别。 LAST_INSERT_ID() 函数可用于获取新插入节点的 ID。

以上是如何将数据库结果转换为分层数组对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!