
本文详细介绍了如何使用 php 将包含父子关系(如问题与答案)的扁平数组数据,高效地转换为具有清晰层级结构的多维数组。教程将从基础的单层合并方法入手,逐步深入到利用 id 索引和 php 引用构建多层级树状结构的通用解决方案,帮助开发者灵活处理和组织复杂数据。
在数据处理和展示中,我们经常会遇到需要将数据库查询结果或其他来源的扁平数据(即所有记录都在同一层级)转换为具有层级关系(如父子、祖孙)的结构。这种转换对于构建导航菜单、评论系统、组织架构图或问答系统等场景至关重要。本教程将以一个常见的问答数据为例,详细讲解如何在 PHP 中实现这一转换过程。
假设我们有一个包含问题和答案的扁平数组,每个元素都包含 TYPE(类型)、PARTY_ID(唯一标识符)和 PARENT_USER_CONTENT_ID(父级标识符)。其中,PARENT_USER_CONTENT_ID 为空字符串的表示顶级节点(如问题),非空则表示子节点(如答案),其值指向父节点的 PARTY_ID。
示例输入数据:
<?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
)
)
)
// ... 其他问题及其答案
)
*/
?>这种方法适用于父节点只有一个直接子节点,或者我们只关心将第一个匹配的子节点合并到父节点的情况。它利用 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 实现教程的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号