将扁平数据转换为分层父子结构:PHP 实现教程

将扁平数据转换为分层父子结构:PHP 实现教程

本文详细介绍了如何使用 php 将包含父子关系(如问题与答案)的扁平数组数据,高效地转换为具有清晰层级结构的多维数组。教程将从基础的单层合并方法入手,逐步深入到利用 id 索引和 php 引用构建多层级树状结构的通用解决方案,帮助开发者灵活处理和组织复杂数据。

在数据处理和展示中,我们经常会遇到需要将数据库查询结果或其他来源的扁平数据(即所有记录都在同一层级)转换为具有层级关系(如父子、祖孙)的结构。这种转换对于构建导航菜单、评论系统、组织架构图或问答系统等场景至关重要。本教程将以一个常见的问答数据为例,详细讲解如何在 PHP 中实现这一转换过程。

理解扁平数据结构

假设我们有一个包含问题和答案的扁平数组,每个元素都包含 TYPE(类型)、PARTY_ID(唯一标识符)和 PARENT_USER_CONTENT_ID(父级标识符)。其中,PARENT_USER_CONTENT_ID 为空字符串的表示顶级节点(如问题),非空则表示子节点(如答案),其值指向父节点的 PARTY_ID。

示例输入数据:

将扁平数据转换为分层父子结构:PHP 实现教程

即构数智人

即构数智人是由即构科技推出的AI虚拟数字人视频创作平台,支持数字人形象定制、短视频创作、数字人直播等。

将扁平数据转换为分层父子结构:PHP 实现教程36

查看详情 将扁平数据转换为分层父子结构:PHP 实现教程

<?php $flatData = [     [ 'TYPE' => '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免费学习笔记(深入)”;

<?php /* Array (     [0] => 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 数组函数进行高效处理。

 <?php $arr = [     [ 'TYPE' => '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 实现教程的详细内容,更多请关注

暂无评论

发送评论 编辑评论


				
上一篇
下一篇
text=ZqhQzanResources