问题:
给定一组表示层次结构的名称-父名称对关系,任务是将它们转换为最少数量的嵌套树结构。例如,使用以下输入:
Child : Parent H : G F : G G : D E : D A : E B : C C : E D : NULL
预期输出是一系列分层树:
D ├── E │ ├── A │ │ └── B │ └── C └── G ├── F └── H
目标是生成嵌套的
解决方案:
为了有效地将输入转换为分层树结构,采用了递归方法。定义了以下函数:
function parseTree($tree, $root = null): array { $return = []; foreach ($tree as $child => $parent) { if ($parent == $root) { unset($tree[$child]); $return[] = [ 'name' => $child, 'children' => parseTree($tree, $child), ]; } } return empty($return) ? null : $return; } function printTree($tree) { if (!is_null($tree) && count($tree) > 0) { echo '<ul>'; foreach ($tree as $node) { echo '<li>'.$node['name']; printTree($node['children']); echo '</li>'; } echo '</ul>'; } }
用法:
$result = parseTree($tree); printTree($result);
此方法首先解析输入,以数组格式创建分层树结构。随后,它遍历树,生成所需的嵌套
组合函数:
为了更有效地实现,可以创建两个函数的组合版本:
function parseAndPrintTree($root, $tree) { if (!is_null($tree) && count($tree) > 0) { echo '<ul>'; foreach ($tree as $child => $parent) { if ($parent == $root) { unset($tree[$child]); echo '<li>'.$child; parseAndPrintTree($child, $tree); echo '</li>'; } } echo '</ul>'; } }
以上是如何高效地将父子关系转化为嵌套层次树?的详细内容。更多信息请关注PHP中文网其他相关文章!