親子関係からの階層ツリー生成
チャレンジ:
コレクションの変換名前と親名のペアを階層ツリー構造にします。目標は、子と親の関係を表すネストされた HTML 順序なしリスト (
再帰的アプローチ:
解決策2 つの再帰関数を使用します。最初の関数 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; }
2 番目の関数 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);
結合関数:
効率を向上させるために、2 つの関数を 1 つの関数にマージできます:
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 中国語 Web サイトの他の関連記事を参照してください。