插件窝 干货文章 php数组怎么转为树型数组

php数组怎么转为树型数组

递归 parent 数组 array 741    来源:    2025-03-16

在PHP中,将普通的数组转换为树形结构数组通常涉及到递归操作。假设你有一个包含父子关系的数组,每个元素都有一个唯一的ID和一个指向其父元素的parent_id。以下是一个示例代码,展示如何将这种数组转换为树形结构:

function buildTree(array &$elements, $parentId = 0) {
    $branch = [];

    foreach ($elements as &$element) {
        if ($element['parent_id'] == $parentId) {
            $children = buildTree($elements, $element['id']);
            if ($children) {
                $element['children'] = $children;
            }
            $branch[] = $element;
            unset($element);
        }
    }
    return $branch;
}

// 示例数组
$array = [
    ['id' => 1, 'parent_id' => 0, 'name' => 'Node 1'],
    ['id' => 2, 'parent_id' => 1, 'name' => 'Node 1.1'],
    ['id' => 3, 'parent_id' => 1, 'name' => 'Node 1.2'],
    ['id' => 4, 'parent_id' => 2, 'name' => 'Node 1.1.1'],
    ['id' => 5, 'parent_id' => 0, 'name' => 'Node 2'],
    ['id' => 6, 'parent_id' => 5, 'name' => 'Node 2.1'],
];

$tree = buildTree($array);

print_r($tree);

代码解释:

  1. buildTree 函数:这是一个递归函数,用于构建树形结构。它接受两个参数:

    • $elements:原始数组的引用。
    • $parentId:当前处理的父节点的ID,默认为0(表示根节点)。
  2. 循环遍历:函数遍历数组中的每个元素,检查其 parent_id 是否等于当前的 $parentId。如果是,则将该元素添加到 $branch 数组中。

  3. 递归调用:对于每个找到的子节点,函数递归调用自身,以查找该子节点的子节点。

  4. 构建树形结构:如果找到子节点,则将它们作为 children 键添加到当前节点中。

  5. 返回结果:最终返回构建好的树形结构。

示例输出:

Array
(
    [0] => Array
        (
            [id] => 1
            [parent_id] => 0
            [name] => Node 1
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [parent_id] => 1
                            [name] => Node 1.1
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 4
                                            [parent_id] => 2
                                            [name] => Node 1.1.1
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [id] => 3
                            [parent_id] => 1
                            [name] => Node 1.2
                        )

                )

        )

    [1] => Array
        (
            [id] => 5
            [parent_id] => 0
            [name] => Node 2
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 6
                            [parent_id] => 5
                            [name] => Node 2.1
                        )

                )

        )

)

总结:

通过递归的方式,你可以轻松地将一个包含父子关系的数组转换为树形结构。这种方法在处理嵌套数据时非常有用,尤其是在构建菜单、分类等场景中。