从父子关系生成层次树
挑战:
转换集合名称-父名称对形成分层树结构。目标是生成表示子父关系的嵌套 HTML 无序列表 (
递归方法:
解决方案使用两个递归函数。第一个函数 parseTree() 遍历树结构并构造层次树。它搜索指定根的直接子节点并将它们添加到结果树中,递归地解析每个子节点的子节点。
function parseTree($tree, $root = null) { $return = array(); foreach($tree as $child => $parent) { if($parent == $root) { unset($tree[$child]); $return[] = array( 'name' => $child, 'children' => parseTree($tree, $child) ); } } return empty($return) ? null : $return; }
第二个函数 printTree() 遍历由 parseTree() 生成的树并打印相应的 HTML 无序list.
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>'; } }
用法:
要将给定的名称-父名称对转换为树结构并打印 HTML 无序列表,您可以将这些函数调用为如下:
$result = parseTree($tree); printTree($result);
组合函数:
为了提高效率,可以将两个函数合并为一个函数:
function parseAndPrintTree($root, $tree) { $return = array(); 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>'; } }
这个组合函数简化了解析和打印过程,减少了迭代次数必填。
以上是如何根据父子关系生成分层 HTML 树?的详细内容。更多信息请关注PHP中文网其他相关文章!