有人可以告诉我为什么这不起作用。
我试图通过使用php dom从页面获取某个href并且href - www.imdb.com/title/tt-some-id
包含单词imdb
所以在下面的示例中我尝试获取href通过使用PHP函数strpos
来查找单词imdb
,但它看起来不起作用。
$page = 'www.someurl.com';
$data = array();
$dom = new DOMDocument();
@$dom->loadHTML($page);
$data['imdb_link'];
$links = $dom->getElementsByTagName('a');
foreach ($links as $link) {
$href = $link->getAttribute('href');
if (false !== strpos($href,'imdb')) {
$data['imdb_link'] = $href;
} else {
$data['imdb_link'] = '';
}
}
来自页面的链接
<a href="some-url.com"></a>
<a href="www.imdb.com/title/some-id"></a>
<a href="another-url.com"></a>
<a href="another-url.com"></a>
有人可以告诉我为什么感谢
答案 0 :(得分:3)
您也可以将逻辑移动到Xpath。结果将是一个没有匹配元素的空字符串:
$page='<a href="some-url.com"></a>
<a href="www.imdb.com/title/some-id"></a>
<a href="another-url.com"></a>
<a href="another-url.com"></a>';
$dom = new DOMDocument();
@$dom->loadHTML($page);
$xpath = new DOMXpath($dom);
$data['imdb_link'] = $xpath->evaluate(
'string(//a[contains(@href, "imdb")]/@href)'
);
var_dump($data);
array(1) {
["imdb_link"]=>
string(26) "www.imdb.com/title/some-id"
}
答案 1 :(得分:2)
这实际上是有效的,但你要覆盖它..
正如您所看到的,您的最终<a>
href不包含 imdb 文本,因此您的else
声明会覆盖您之前找到的结果。
只需从代码中删除else
部分即可。