問題:
給定一組父表示層次結構的名稱-父名稱對關係,任務是將它們轉換為最少數量的嵌套樹結構。例如,使用以下輸入:
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中文網其他相關文章!