首页 >后端开发 >php教程 >如何高效地将记录数组转换为嵌套树结构?

如何高效地将记录数组转换为嵌套树结构?

Barbara Streisand
Barbara Streisand原创
2024-11-29 12:55:11559浏览

How to Efficiently Convert an Array of Records into a Nested Tree Structure?

如何高效地将记录数组转换为树结构

在这种情况下,您有一个表示层次结构的记录数组。每条记录都有一个 ID、父 ID 和名称。目标是将此数组转换为嵌套树结构,其中根节点有子节点,而子节点又可能有自己的子节点。

为了实现此目的,使用了一个名为 createTree 的递归函数。该函数采用两个参数:对记录数组的引用和父数组。它迭代父数组,并针对每个父数组检查记录数组中是否有任何子记录。如果存在子记录,则递归调用createTree函数处理它们,并将结果赋值给父记录的children属性。

以下是一个示例:

$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]));
print_r($tree);

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 函数递归地将父记录转换为子记录,创建数据的分层树表示。请注意,该函数对输入数组的引用进行操作,允许将更改传播回原始数组。

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

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