從父子關係產生層次樹
挑戰:
轉換集合名稱-父名稱對形成分層樹結構。目標是產生表示子父關係的巢狀 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中文網其他相關文章!