tyoma_koder
@tyoma_koder

Как получить непосредственного ребенка элемента в phpQuery?

Есть 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 строку название этой категории + названия всех дочерних категорий
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
tyoma_koder
@tyoma_koder Автор вопроса
помогло $cat_info_html->filter(':first')->text()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы