Как с помощью simple_html_dom
производить поиск и рекурсивную сборку?
Как из этой HTML структуры:
<ul class="comments">
<li>
<span>Comment #1</span>
</li>
<li>
<span>Comment #2</span>
<ul class="children">
<li>
<span>Child Comment #1</span>
<ul class="children">
<li>
<span>SubChild Comment #1</span>
<ul class="children">
<li>
<span>SubSubChild Comment #1</span>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
Получить вот такой массив?
[{
'comment' => 'Comment #1',
}, {
'comment' => 'Comment #2',
'childrens' => [{
'comment' => 'Child Comment #1',
'childrens' => [{
'comment' => 'SubChild Comment #1',
'childrens' => [{
'comment' => 'SubSubChild Comment #1'
}]
}]
}]
}]
Пробовал собирать каждый раз проходя по массиву, но в итоге получилось так, что внутри цикла расплодилось ещё 4 цикла. Подскажите пожалуйста, буду ПРЕМНОООООГО благодарен!
Если вы говорите про рекурсию, то откуда же у вас 4 цикла?
вот ваши входные
$html = <<<HTML
<ul class="comments">
<li>
<span>Comment #1</span>
<ul class="children">
<li><span>#1-1</span></li>
</ul>
</li>
<li>
<span>Comment #2</span>
<ul class="children">
<li>
<span>Child Comment #1</span>
<ul class="children">
<li>
<span>SubChild Comment #1</span>
<ul class="children">
<li>
<span>SubSubChild Comment #1</span>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
HTML;
загружаете документ, находите верхний узел и определяете объект для результатов
$html = str_get_html($html);
$c = $html->find(".comments", 0);
$result = [ ];
и рекурсивная функция обхода
$search = function($ul, &$res) use (&$search){
foreach($ul->children() as $li){
$r['comment'] = $li->find("span", 0)->text();
$sub = $li->find(".children", 0);
if($sub){
$r['children'] = [];
$search($sub, $r['children']);
}
$res[] = $r;
}
};
на вход функции подается ul
список. В цикле вы обходите непосредственные дочерние li
($ul->children()
).
На каждой итерации собираете коммент $r
, сам текст, и проверяете, есть ли дочерние .children
($sub
). Если есть, то добавляете $r['children']
и запускаете рекурсию.
вызываете метод и смотрите результат
$search($c, $result);
echo json_encode($result, JSON_PRETTY_PRINT);
который будет таким
[
{
"comment": "Comment #1 ",
"children": [
{
"comment": "#1-1 "
}
]
},
{
"comment": "Comment #2 ",
"children": [
{
"comment": "Child Comment #1 ",
"children": [
{
"comment": "SubChild Comment #1 ",
"children": [
{
"comment": "SubSubChild Comment #1 "
}
]
}
]
}
]
}
]
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
есть одностраничник в котором есть форма по типу "оставить заявку" к которой в свою очередь привязан следующий php скрипт :
В нашей стране очень ограничен внешний трафик либо частенько отваливаетсяЕсть сервер внутренний, NGINX
Нужно , чтобы колонки соотвествовали значениям , к примеру в колонке возраст только ячейки с возрастом и тд