分类 默认分类 下的文章

在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.

马头琴的奇妙之处就在于,不管是哪儿的曲子只要用他的演奏,不仅能完美契合而且毫无违和感,更像是被重新赋予了生命。

一种只属于广袤草原的盎然生机, 在音符间肆意流淌。

也不管你是哪儿的人,是否到过草原,却有种莫名的似曾相识之感,好像你早与草原情根深种,结下了不解的情缘。

- 阅读剩余部分 -