Я вижу здесь реализацию через рекурсивную функцию, но...
Я десятки раз пытался составить эту функцию, но не могу уловить логику по которому это должно работать, хотя на первый взгляд это не должно быть так уж сложно. Я вроде понимаю точки, в которых должен происходить выход из рекурсивной функции, но мне это ничего не дает.
Хотелось бы понять алгоритм, как он должен работать, в любом случае языке, возможно, хотя бы на словах, потому что пока я не могу "текстом" даже мысленно сформулировать, как должно выглядеть решение.
Я хочу реализовать функцию для генерации результирующий массив в нужном мне формате.
Я подготовил данные, ввод и вывод, чтобы вам было понятнее, чего я хочу добиться.
ВВОД
$input = ['h1', 'p', 'h2', 'p', 'p', 'h3', 'p', 'h2', 'p', 'h3', 'p', 'h1', 'p', 'h2', 'p', 'h3', 'p'];
ВЫВОД
$output = [
[
'title' => 'h1',
'descriptions' => ['p'],
'childrens' => [
[
'title' => 'h2',
'descriptions' => ['p', 'p'],
'childrens' => [
[
'title' => 'h3',
'descriptions' => ['p'],
],
]
],
[
'title' => 'h2',
'descriptions' => ['p'],
'childrens' => [
[
'title' => 'h3',
'descriptions' => ['p']
]
]
]
]
],
[
'title' => 'h1',
'descriptions' => ['p'],
'childrens' => [
[
'title' => 'h2',
'descriptions' => ['p'],
'childrens' => [
[
'title' => 'h3',
'descriptions' => ['p']
]
]
]
]
]
];
моя (не работающая) реализация:
function parseDOM(array $inputArray): array {
$output = [];
$position = 0;
$domElementsQuantity = count($inputArray);
$parentTagLvl = 0;
function getCurrentTagLvl(string $node): bool|int
{
return match ($node) {
'h1' => 1,
'h2' => 2,
'h3' => 3,
'h4' => 4,
'h5' => 5,
'h6' => 6,
default => false,
};
}
function recursiveCreateTree(array $inputArray, int &$offsetIndex, $parentTagLvl) {
$tree = [];
$arrayItemsQuantity = count($inputArray);
while ($offsetIndex
Подробнее здесь: https://stackoverflow.com/questions/782 ... n-an-array
Формирование древовидной структуры из HTML-элементов в массиве [закрыто] ⇐ Php
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение