我想使用PHP Simple HTML DOM Parser在我的网站上显示我所有的Left4Dead Steam成就。蒸汽社区网站上的成就列表如下所示:
<img src="…" /><br />
<div class="achieveImgHolder"><img src="…" /></div>
<div class="achieveTxtHolder">
<img src="…" />
<div class="achieveTxt">
<h3>Stand Tall</h3>
<h5>Survive a campaign without being incapacitated.</h5>
</div>
</div>
<br clear="left" />
通过
将活动成就与非活动成就分开<br /><br /><br />
所以我写了这段代码来展示我的成就:
<?php
include("simple-html-dom-parser.php");
$achievementPage = file_get_html("http://steamcommunity.com/id/snorpey/stats/L4D?tab=achievements");
$activeInactiveSplit = split("<br /><br /><br />", $achievementPage);
$actives = str_get_html($activeInactiveSplit[0]);
$inactives = str_get_html($activeInactiveSplit[1]);
foreach($actives->find(".achieveTxtHolder") as $achievement)
{
echo $achievement->find(".achieveTxt h3", 0)->innertext;
}
?>
我总是收到以下错误,不知道从哪里来。
致命错误:在第8行的testing.php中调用非对象的成员函数find()
我使用页面的另一部分测试了解析器并且它正常工作。分割页面似乎有问题。
echo $actives // works w/out errors
这到底出了什么问题?
答案 0 :(得分:3)
更改...
$actives->find(".achieveTxtHolder", 0)
为...
$actives->find(".achieveTxtHolder")
指定0仅返回第一个匹配项而不是可迭代的出现列表;因为你正在使用foreach
,所以你想要所有的事件。否则foreach
会尝试迭代不是列表的内容,因此您的$achievement
变量实际上是NULL,因此当您尝试在其上调用->find()
时会出现错误。< / p>