我喜欢找到没有类或ID的特定h4
标签。我想在其中找到h4
文本标记:
如您在下面看到的,h4
标签位于块标签内,但每个产品的块标签编号均不同,例如其中一些没有价格。因此,如果我这样做$html->find('block[2]')
,如果没有任何价格,它就会为我显示颜色。
所以我想说h4 inner text = 'Price:'
是否显示$2,163
标记内的.block
。好?
目标HTML:
<div class="article" id="article">
<div class="block">
<h4>First name and last name:</h4>
name name
</div>
<div class="block">
<h4>Price:</h4>
$2,163
<span>(50% off)</span>
</div>
<div class="block">
<h4>Color:</h4>
black,
<span>and white</span>
</div>
<div class="block">
<h4>Date:</h4> 2020
</div>
<div class="block">
<h4>Time:</h4>
<time datetime="12">12 clock</time>
</div>
</div>
我的PHP:
$html = file_get_html("$url");
foreach ($html->find('#article') as $ret) {
foreach ($ret->find('.block') as $pa) {
foreach ($pa->find('h4') as $e) {
if (strpos($e->innerhtml, "Price:") !== FALSE) {
$str = $e->innerhtml;
$price = $str->parent()->innertext;
//$price = $str->plaintext;
echo $price;
}
}
}
}
我想检查<h4>Price:<h4>
是否存在,然后显示.block
内容,而不显示h4。
但我什么也没得到。
我的英语很抱歉
答案 0 :(得分:1)
您可以使用如下功能。它在具有<h4>
ID的元素中的block
类的元素中寻找任何article
,然后检查其文本。如果匹配,它将删除标题并返回块中剩余内容的文本:
function findValue($html, string $key): ?string
{
foreach ($html->find('#article .block h4') as $h4) {
if ($h4->innertext() === "{$key}:") {
$h4 = clone $h4; // to prevent altering the document
$block = $h4->parent();
$block->removeChild($h4);
return $block->text();
}
}
return null;
}
用法:
echo findValue($html, 'First name and last name'), PHP_EOL; // name name
echo findValue($html, 'Price'), PHP_EOL; // $2,163 (50% off)
echo findValue($html, 'Color'), PHP_EOL; // black, and white
echo findValue($html, 'Date'), PHP_EOL; // 2020
echo findValue($html, 'Time'), PHP_EOL; // 12 clock