Я хочу проанализировать HTML-код для создания вложенной навигации на основе заголовков в этом документе.
Массив, подобный этому, - это то, что я пытаюсь создать:
[
'name' => 'section 1',
'number' => '1',
'level' => 1,
'children' => [
[
'name' => 'sub section 1',
'number' => '1.1',
'level' => 2,
'children' => []
],
[
'name' => 'sub section 2',
'number' => '1.2',
'level' => 2,
'children' => []
]
],
]
Таким образом, если документ имеет H3 после H2, код может затем проанализировать его и создать вложенный массив с дочерними элементами для каждого последующего уровня заголовков H
Я полагаю, что для этого нужно сделать несколько основных вещей:
- Получить все заголовки
- Рекурсивный цикл (H3 после H2 должен быть дочерним в массиве)
- Создать номер раздела
1.1.1
или 1.1.2
например
Это мой код для извлечения заголовков:
$dom = new \DomDocument();
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
// Extract the heading structure
$xpath = new \DomXPath($dom);
$headings = $xpath->query('//h1|//h2|//h3|//h4|//h5|//h6');
Я пытался создать рекурсивную функцию, но я не уверен, что лучший способ получитьэто работает