
本文介绍了一种将扁平数组转换为树形结构的方法,该数组中的元素通过点符号表示层级关系,并使用 "type" 属性区分不同类型的节点。通过对数组进行两次遍历,首先基于层级关系和类型创建键值对,然后根据父子关系构建树形结构,最终得到所需的结果。文章提供了示例代码,并针对层级编码的唯一性提出了建议。
在数据处理中,我们经常会遇到需要将扁平数组转换为树形结构的情况。例如,一个扁平数组可能包含具有层级关系的分类数据,每个元素都有一个表示层级关系的字符串(例如 "1.2.3")和一个表示类型的属性(例如 "category" 或 "item")。本文将介绍一种基于点符号和 "type" 属性将这种扁平数组转换为树形结构的方法。
核心思想是首先将扁平数组转换为一个以层级关系为键的关联数组,然后遍历这个关联数组,根据层级关系找到每个节点的父节点,并将该节点添加到父节点的子节点列表中。如果一个节点没有父节点,则将其添加到结果数组中,作为树的根节点。
以下是一个 PHP 示例代码,演示了如何实现这个算法:
<?php
function flatToTree(array $array): array
{
$keyed = [];
$result = [];
// 假设层级编号在不同类型中不是唯一的,则按类型和层级组合键
foreach ($array as $item) {
$keyed[$item["type"] . $item["hierarchy"]] = $item;
}
foreach ($keyed as &$item) {
// 使用 pathinfo 获取父节点的层级关系
$parent = pathinfo($item["hierarchy"], PATHINFO_FILENAME);
// 如果父节点与当前节点相同,则说明当前节点是根节点
if ($parent == $item["hierarchy"]) {
$result[] = &$item;
} else {
// 将当前节点添加到父节点的子节点列表中
$keyed["category_label$parent"]["children"][] = &$item;
}
}
return $result;
}
// 示例数据
$array = [
[
"hierarchy" => "1",
"title" => "Fruits",
"type" => "category_label"
],
[
"hierarchy" => "1.1",
"title" => "Citruses",
"type" => "category_label"
],
[
"hierarchy" => "1.1.1",
"title" => "Orange",
"type" => "item"
],
[
"hierarchy" => "1.1",
"title" => "Mango",
"type" => "item"
],
[
"hierarchy" => "1.2",
"title" => "Grape",
"type" => "item"
]
];
// 调用函数
$tree = flatToTree($array);
// 打印结果 (方便调试)
echo "<pre>";
print_r($tree);
echo "</pre>";
?>代码解释:
本文介绍了一种将扁平数组转换为树形结构的方法,该方法基于点符号表示的层级关系和 "type" 属性。通过示例代码和注意事项,希望能够帮助读者理解和应用这种方法。在实际应用中,需要根据具体情况进行调整和优化,以满足不同的需求。
以上就是将扁平数组转换为基于点符号和 "type" 属性的树形数组的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号