Добрый день. Имеется код:
function getParamsXCom($articul)
{
// подключаем страницу html товара
$_products = phpQuery::newDocument(file_get_contents('https://www.xcom-shop.ru/search/?o=n&s='.$articul));
$link = 'https://www.xcom-shop.ru' . $_products->find('div.wrap div.name a')->attr('href');
$detail_page = phpQuery::newDocument(file_get_contents($link));
$arr = [];
foreach ($detail_page->find('#prop-columns .prop-line.delimiter') as $char) {
$category = pq($char);
$props = [];
$i = 0;
// подобие функции .nextUntil в JQuery
foreach($category as $child) {
if($i == 2){ break; }
$i = (pq($child)->attr('class') == 'delimiter') ? ($i + 1) : $i;
if($i == 0){ continue; }
foreach(pq($child) as $el) {
$props[$el->find('.call').text()] = $el->find('.prop-value')->text();
}
}
$arr[$category->text()] = $props;
}
print_r($arr);
}
print_r(getParamsXCom('4YV96ES'));
Данный код парсит характеристики товара (артикул у которого 4YV96ES). Ссылка на товар:
https://www.xcom-shop.ru/hp_proone_440_g4_645770.html
У меня также имеется JS-код:
let arr = {};
$('#prop-columns .prop-line.delimiter').each(function () {
const category = $(this);
let props = {};
category.nextUntil('.delimiter').each(function() {
const item = $(this);
props[item.find('.call').text()] = item.find('.prop-value').text();
});
arr[category.text()] = props;
});
console.log(arr);
При исполнении которого в консоли браузера формируется массив с полной иерархией характеристик товара:
Данный код я хотел переделать под PHP парсинг и использовал библиотеку PHPQuery, в которой можно использовать функции JQuery. Код я прикрепил в самом начале описания вопроса.
Теперь к проблеме - так как в PHPQuery нет штатной функции nextUntil, поэтому я написал ей подобие (прокомментировал у себя этот код). В итоге при исполнении моей функции с полным парсингом и выводом итогового массива с полной иерархией характеристик я получаю только названия групп характеристик, а что находится в этих группах я не получаю. С чем это может быть связано?