【发布时间】:2021-03-03 16:29:52
【问题描述】:
有人可以帮我解决这个问题吗,我收到的类似问题的假设答案并没有真正回答。我有 2 个针对 html 源的 xpath 查询,1 个返回一个 div 类名数组,其中包含其名称中的“top-menu”,另一个返回一个内部 li 类名数组(这些 div 类名包含“顶部菜单”)。有没有一种优雅的方式来组合 2,以便只以以下格式返回一个数组?
Array
(
[0] => top-menu top-menu-2
(
[0] => menu-item top-menu-item top-menu-item-1
[1] => menu-item top-menu-item top-menu-item-2
)
[1] => top-menu top-menu-8
(
[0] => menu-item x
)
)
HTML来源:
<div class="top-menu top-menu-2">
<ul class="j-menu">
<li class="menu-item top-menu-item top-menu-item-1">
</li>
<li class="menu-item top-menu-item top-menu-item-2">
</li>
</ul>
</div>
<div class="top-menu top-menu-8">
<ul class="j-menu">
<li class="menu-item x">
</li>
</ul>
</div>
返回父div类的内部li类名称数组的代码(名称中包含“top-menu”):
$doc = new DOMDocument();
$doc->loadHTML($data);
$xpath = new DOMXpath($doc);
$targets = $xpath->query(".//div[contains(@class, 'top-menu')]//li/@class");
$classNames_array = array();
foreach ($targets as $target) {
$classNames_array[] = $target->textContent;
}
print_r(array_values($classNames_array));
返回包含“top-menu”的div类名数组的代码
$doc = new DOMDocument();
$doc->loadHTML($data);
$xpath = new DOMXpath($doc);
$targets = $xpath->query(".//div[contains(@class, 'top-menu')]");
$classNames_array = array();
foreach ($targets as $target) {
$classNames_array[] = $target->textContent;
}
print_r(array_values($classNames_array));
【问题讨论】: