我的HTML代码是代码重复16次:
<div class="headline_image">
<a ga-cat="slideshow-view" ga-action="view-1" href="mylink"><img src="http://dd4994.jpg" width="420" height="323" align="right" alt="my text "/></a>
</div>
我想得到所有的imgs链接和文本也href我做了什么:
for ($x = 0; $x <= 15; $x++) {
$imglink = $html->find('div[class=headline_image] img', $x)->getAttribute('src');
$mytext = $html->find('div[class=headline_image] img', $x)->getAttribute('alt');
$postlink = $html->find('div[class=headline_image] a', $x)->getAttribute('href');
echo '<br/>';
echo $mytext;
echo '<br/>';
print_r($postlink);
echo '<br/>';
}
代码很慢,有什么变化吗?
使用过多的匿名对象会降低代码的速度。这意味着您不将函数的结果放入变量中,而只是在"动态"中使用它。这需要一次又一次地运行您的函数,从而降低您的项目速度。
因为您可以使用函数find
来返回数组,所以我建议您在for循环之前这样做。
$imgarray = $html->find('div[class=headline_image] img', $x);
通过这种方式,$html->find
只运行一次,而不是十六次。在for循环中,您可以将其用作数组并处理结果:$imgarray[$x]
。你对$anchorarray
做了同样的处理,你的代码就会加快,你会看到的。
另一种解决方案是在可以找到这16项的容器(或body元素)上使用PHP DOM $childNodes
。这将返回十六个div
元素,您可以通过为<a>
元素调用$firstChild
和为<img>
元素再次调用$firstChild来导航这些元素。如果你想对网站进行更改(比如在末尾添加更多内容等),这可能更安全。
嘿Daniel我把代码改成了:
$imgarray = $html->find('div[class=headline_image] img');
$linkarray = $html->find('div[class=headline_image] a');
for ($x = 0; $x <= 15; $x++) {
echo $imgarray[$x]->getAttribute('src');
echo '<br/>';
echo $imgarray[$x]->getAttribute('alt');
echo '<br/>';
echo $linkarray[$x]->getAttribute('href');
echo '<br/>';
}
通常,正确的迭代方式如下所示:
foreach($html->find('div') as $div){
echo $div;
}