
本文详细介绍了如何使用 php 将包含父子关系(如问题与答案)的扁平数组数据,高效地转换为具有清晰层级结构的多维数组。教程将从基础的单层合并方法入手,逐步深入到利用 id 索引和 php 引用构建多层级树状结构的通用解决方案,帮助开发者灵活处理和组织复杂数据。
在数据处理和展示中,我们经常会遇到需要将数据库查询结果或其他来源的扁平数据(即所有记录都在同一层级)转换为具有层级关系(如父子、祖孙)的结构。这种转换对于构建导航菜单、评论系统、组织架构图或问答系统等场景至关重要。本教程将以一个常见的问答数据为例,详细讲解如何在 PHP 中实现这一转换过程。
理解扁平数据结构
假设我们有一个包含问题和答案的扁平数组,每个元素都包含 TYPE(类型)、PARTY_ID(唯一标识符)和 PARENT_USER_CONTENT_ID(父级标识符)。其中,PARENT_USER_CONTENT_ID 为空字符串的表示顶级节点(如问题),非空则表示子节点(如答案),其值指向父节点的 PARTY_ID。
示例输入数据:
'Answer', 'PARTY_ID' => 115, 'PARENT_USER_CONTENT_ID' => 112 ], [ 'TYPE' => 'Question', 'PARTY_ID' => 112, 'PARENT_USER_CONTENT_ID' => '' ], [ 'TYPE' => 'Question', 'PARTY_ID' => 113, 'PARENT_USER_CONTENT_ID' => '' ], [ 'TYPE' => 'Answer', 'PARTY_ID' => 116, 'PARENT_USER_CONTENT_ID' => 113 ], [ 'TYPE' => 'Question', 'PARTY_ID' => 114, 'PARENT_USER_CONTENT_ID' => '' ], [ 'TYPE' => 'Answer', 'PARTY_ID' => 117, 'PARENT_USER_CONTENT_ID' => 112 ], // 112 的第二个答案 [ 'TYPE' => 'Answer', 'PARTY_ID' => 118, 'PARENT_USER_CONTENT_ID' => 113 ], // 113 的第二个答案 [ 'TYPE' => 'Comment', 'PARTY_ID' => 119, 'PARENT_USER_CONTENT_ID' => 115 ], // 115 的子评论 (多层级)];?>
我们的目标是将上述扁平数据转换为如下所示的层级结构:
立即学习“PHP免费学习笔记(深入)”;
Array ( [TYPE] => Question [PARTY_ID] => 112 [PARENT_USER_CONTENT_ID] => [children] => Array // 嵌套的子节点 ( [0] => Array ( [TYPE] => Answer [PARTY_ID] => 115 [PARENT_USER_CONTENT_ID] => 112 [children] => Array // 更深层级的子节点 ( [0] => Array ( [TYPE] => Comment [PARTY_ID] => 119 [PARENT_USER_CONTENT_ID] => 115 ) ) ) [1] => Array ( [TYPE] => Answer [PARTY_ID] => 117 [PARENT_USER_CONTENT_ID] => 112 ) ) ) // ... 其他问题及其答案)*/?>
方法一:基于 ID 索引的单层父子合并(适用于单一子节点场景)
这种方法适用于父节点只有一个直接子节点,或者我们只关心将第一个匹配的子节点合并到父节点的情况。它利用 PHP 数组函数进行高效处理。
'Answer', 'PARTY_ID' => 115, 'PARENT_USER_CONTENT_ID' => 114 ], [ 'TYPE' => 'Question', 'PARTY_ID' => 112, 'PARENT_USER_CONTENT_ID' => '' ], [ 'TYPE' => 'Question', 'PARTY_ID' => 113, 'PARENT_USER_CONTENT_ID' => '' ], [ 'TYPE' => 'Answer', 'PARTY_ID' => 116, 'PARENT_USER_CONTENT_ID' => 113 ], [ 'TYPE' => 'Question', 'PARTY_ID' => 114, 'PARENT_USER
以上就是将扁平数据转换为分层父子结构:PHP 实现教程的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1329779.html
微信扫一扫
支付宝扫一扫