Есть HTML
<ul class="gs--topNavList">
<li>
<a href="https://site.ru/cat1" class="mf-listen">Катеория 1</a>
</li>
<li class="gs--topNavList__sub">
<a href="https://site.ru/sadovaya-mebel" class="mf-listen">
Категория 2 <span class="gs--topNavCaret"></span> </a>
<ul class="gs--topNavSub">
<li>
<a href="https://site.ru/cat2.1" class="mf-listen">Подкатегория 2.1</a>
</li>
<li>
<a href="https://site.ru/cat2.2" class="mf-listen">Подкатегория 2.2</a>
</li>
</ul>
</li>
</ul>
Пытаюсь получить из него массив
[
[
'name' => 'Катеория 1',
'url' => 'https://site.ru/cat1'
],
[
'name' => 'Катеория 2',
'url' => 'https://site.ru/cat2',
'childrens'=>[
[
'name' => 'Катеория 2.1',
'url' => 'https://site.ru/cat2.1'
],
[
'name' => 'Катеория 2.2',
'url' => 'https://site.ru/cat2.2'
],
]
]
];
$html = file_get_contents('https://site.ru/');
$pq = phpQuery:: newDocument($html);
$categories = [];
$cats_html = $pq->find('.gs--topNavList>*');
$cats_data = [];
foreach ($cats_html as $cat) {
$cat_obj = pq($cat);
$cat_info_html = $cat_obj->find('a:not(.gs--topNavSub a)');
$cat_childrens = $cat_obj->find('ul .mf-listen');
if (!empty($cat_childrens)) {
$children_arr = [];
foreach ($cat_childrens as $children) {
$children_obj = pq($children);
$children_arr[] = [
'name' => $children_obj->text(),
'url' => $children_obj->attr('href')
];
}
$cats_data[] = [
'name' => $cat_info_html->html(),
'url' => $cat_info_html->attr('href'),
'childrens' => $children_arr
];
} else {
$cats_data[] = [
'name' => $cat_info_html->text(),
'url' => $cat_info_html->attr('href'),
];
}
}
Но в name Категории 2 получаю слепленные в 1 строку название этой категории + названия всех дочерних категорий