首页 >后端开发 >php教程 >如何高效地将平面数组列表转换为层次树结构?

如何高效地将平面数组列表转换为层次树结构?

Barbara Streisand
Barbara Streisand原创
2024-11-29 14:41:10618浏览

How to Efficiently Convert a Flat Array List into a Hierarchical Tree Structure?

将数组列表转换为树结构

在这个问题中,我们的任务是将元素的平面数组转换为分层树状结构。输入数组由具有三个属性的对象组成:id、parentid 和 name。输出应该是一个树结构,其中每个节点代表输入数组中的一个元素,并具有属于它的子节点列表。

为了解决这个问题,我们不能依赖像嵌套集合这样的方法,因为数据库限制。相反,我们利用递归算法来构建树。

$arr = array(
    array('id' => 100, 'parentid' => 0, 'name' => 'a'),
    array('id' => 101, 'parentid' => 100, 'name' => 'a'),
    array('id' => 102, 'parentid' => 101, 'name' => 'a'),
    array('id' => 103, 'parentid' => 101, 'name' => 'a'),
);

$new = array();
foreach ($arr as $a) {
    $new[$a['parentid']][] = $a;
}
$tree = createTree($new, array($arr[0]));

第一步,我们循环遍历输入数组并按其parentid对元素进行分组以创建一个新数组,其中每个键代表父级的id ,该值是其子级的数组。随后,我们调用辅助函数 createTree 来递归地构造树。

function createTree(&$list, $parent) {
    $tree = array();
    foreach ($parent as $k => $l) {
        if (isset($list[$l['id']])) {
            $l['children'] = createTree($list, $list[$l['id']]);
        }
        $tree[] = $l;
    }
    return $tree;
}

createTree 函数有两个参数:重新组织的数组 $list 和表示树中当前级别的数组 $parent。在函数中,我们迭代 $parent 数组并检查 $list 是否包含当前元素的任何子元素。如果找到子元素,我们会递归调用 createTree 来构建该元素的子树,并将其添加为当前元素的 Children 属性。最后,我们将当前元素追加到 $tree 数组并返回树。

通过遵循此算法,我们可以从提供的数组列表高效地构造树结构,生成之间的层次关系的嵌套表示元素。

以上是如何高效地将平面数组列表转换为层次树结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn