我正在尝试将旧的 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。这适用于单个文件。
但是我无法遍历所有文件/菜单并保留父/子信息,因为每个菜单都有不同的深度。
感谢所有建议、提示和帮助!