古い HTML サイトを新しい CMS に変換しようとしています。正しいメニュー階層 (さまざまな深さ) を取得するには、PHP ですべてのファイルを読み取り、メニュー (ネストされた順序付けられていないリスト) を連想配列に抽出/解析します。
root.html
<ul id="menu">
<li class="active">Start</li>
<ul>
<li><a href="file1.html">Sub1</a></li>
<li><a href="file2.html">Sub2</a></li>
</ul>
</ul>
file1.html
<ul id="menu">
<li><a href="root.html">Start</a></li>
<ul>
<li class="active">Sub1</li>
<ul>
<li><a href="file3.html">SubSub1</a></li>
<li><a href="file4.html">SubSub2</a></li>
<li><a href="file5.html">SubSub3</a></li>
<li><a href="file6.html">SubSub4</a></li>
</ul>
</ul>
</ul>
file3.html
<ul id="menu">
<li><a href="root.html">Start</a></li>
<ul>
<li><a href="file1.html">Sub1</a></li>
<ul>
<li class="active">SubSub1</li>
<ul>
<li><a href="file7.html">SubSubSub1</a></li>
<li><a href="file8.html">SubSubSub2</a></li>
<li><a href="file9.html">SubSubSub3</a></li>
</ul>
</ul>
</ul>
</ul>
file4.html
<ul id="menu">
<li><a href="root.html">Start</a></li>
<ul>
<li><a href="file1.html">Sub1</a></li>
<ul>
<li><a href="file3.html">SubSub1</a></li>
<li class="active">SubSub2</li>
<li><a href="file5.html">SubSub3</a></li>
<li><a href="file6.html">SubSub4</a></li>
</ul>
</ul>
</ul>
すべてのファイルをループして、「id="menu"」を抽出し、階層とファイル情報を維持しながら、このような (または同様の) 配列を作成したいと思います
Array
[file] => root.html
[child] => Array
[Sub1] => Array
[file] => file1.html
[child] => Array
[SubSub1] => Array
[file] => file3.html
[child] => Array
[SubSubSub1] => Array
[file] => file7.html
[SubSubSub2] => Array
[file] => file8.html
[SubSubSub3] => Array
[file] => file9.html
[SubSub2] => Array
[file] => file4.html
[SubSub3] => Array
[file] => file5.html
[SubSub4] => Array
[file] => file6.html
[Sub2] => Array
[file] => file2.html
PHP Simple HTML DOM Parser librayの助けを借りて、ファイルを正常に読み取り、メニューを抽出しました
$html = file_get_html($file);
foreach ($html->find("ul[id=menu]") as $ul) {
..
}
メニューのアクティブなセクションのみを解析するには (1 つ以上のレベルアップへのリンクを除外します)、使用しました
$ul->find("ul",-1)
これは、外側の ul 内の最後の ul を見つけます。これは、単一のファイルに最適です。
しかし、各メニューの深さが異なるため、すべてのファイル/メニューをループして親/子情報を保持するのに問題があります。
すべての提案、ヒント、ヘルプに感謝します!