【问题标题】:PHP Simple HTML DOM Parser problem with split()使用 split() 的 PHP 简单 HTML DOM 解析器问题
【发布时间】:2010-12-25 11:02:50
【问题描述】:

我想使用PHP Simple HTML DOM Parser 在我的网站上显示我所有的 Left4Dead Steam 成就。 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

这里到底出了什么问题?

【问题讨论】:

    标签: php html dom parsing split


    【解决方案1】:

    改变...

    $actives->find(".achieveTxtHolder", 0)
    

    到...

    $actives->find(".achieveTxtHolder")
    

    指定 0 仅返回第一次出现而不是可迭代的出现列表;因为您使用的是foreach,所以您想要所有的事件。否则foreach 会尝试遍历不是列表的东西,因此您的$achievement 变量实际上是NULL,因此当您尝试对其调用-&gt;find() 时会出现错误。

    【讨论】:

    • 感谢您的快速回答。我按照您的建议更改了脚本,但它一直遇到相同的错误。
    • 您是否尝试过转储$activeInactiveSplit[0] 和$activeInactiveSplit[1] 的内容(通过print_r($activeInactiveSplit) 之类的方式,看看它们是否符合您的期望?同样,尝试转储您从第一次获得的信息find() 打电话,看看是不是你所期望的。
    • @Snorpey 请点击检查接受 Dav 的回答,谢谢。
    • 请耐心等待,问题似乎还没有完全解决。 :)
    • @snorpey:如果你print_r($actives-&gt;find(".achieveTxtHolder"))会发生什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 2015-02-14
    相关资源
    最近更新 更多