PHP树形结构构建与转换 实现 arrayToTree、treeToArray及获取树深度
在PHP中处理树形结构,特别是从一个数组转换为树形结构(arrayToTree
)以及将树形结构转换回数组(treeToArray
),是实现复杂数据处理和展示的常见需求。此外,获取树的最大深度也是一个有用的功能。下面我将详细介绍如何实现这些功能。
构建树形结构(arrayToTree
)
首先,我们从一个简单的数组构建一个树形结构。假设我们有一个数组,其中每个元素都有一个parent_id
字段指向其父节点。
$items = [
['id' => 1, 'name' => 'Root', 'parent_id' => 0],
['id' => 2, 'name' => 'Child 1', 'parent_id' => 1],
['id' => 3, 'name' => 'Child 2', 'parent_id' => 1],
['id' => 4, 'name' => 'Child 3', 'parent_id' => 2],
['id' => 5, 'name' => 'Child 4', 'parent_id' => 2]
];
我们可以使用以下函数将这个数组转换为树形结构:
function arrayToTree($items, $parentId = 0) {
$branch = [];
foreach ($items as $item) {
if ($item['parent_id'] == $parentId) {
$children = arrayToTree($items, $item['id']);
if ($children) {
$item['children'] = $children;
}
$branch[] = $item;
}
}
return $branch;
}
$tree = arrayToTree($items);
print_r($tree);
将树形结构转换回数组(treeToArray
)
将树形结构转换回数组通常是为了便于存储或进一步处理。我们可以使用递归函数来实现这一点:
function treeToArray($tree) {
$result = [];
foreach ($tree as $node) {
$result[] = $node;
if (!empty($node['children'])) {
foreach (treeToArray($node['children']) as $child) {
$result[] = $child;
}
}
}
return $result;
}
$array = treeToArray($tree);
print_r($array);
获取树的最大深度
要获取树的最大深度,我们可以使用递归函数来遍历每个节点并记录最大深度:
function getMaxDepth($tree) {
$depths = [];
foreach ($tree as $node) {
$depths[] = getNodeDepth($node);
}
return max($depths);
}
function getNodeDepth($node, $depth = 0) {
if (empty($node['children'])) {
return $depth; // Base case: leaf node reached.
} else {
$maxChildDepth = 0; // Initialize max depth for children.
foreach ($node['children'] as $child) {
$maxChildDepth = max($maxChildDepth, getNodeDepth($child, $depth + 1)); // Recursive call.
}
return $maxChildDepth; // Return the maximum depth found in children.
}
}
$maxDepth = getMaxDepth($tree);
echo "Max Depth: " . $maxDepth; // Output the maximum depth.