2009-12-10 1 views
1

Я хочу использовать PHP Simple HTML DOM Parser, чтобы отобразить все мои достижения Left4Dead Steam на моем сайте. Список достижений на сайте пара сообщества выглядит примерно так:PHP Простая проблема с DOM Parser PHP с split()

<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; 
} 
?> 

Я всегда получаю следующую ошибку и понятия не имею, откуда она взялась.

Fatal error: Call to a member function find() on a non-object in testing.php on line 8

Я проверил парсер с другой частью страницы, и он работал правильно. Кажется, что у него проблемы с разделением страницы.

echo $actives // works w/out errors 

Что именно здесь не так?

ответ

3

Изменить ...

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

к ...

$actives->find(".achieveTxtHolder") 

Задание 0 возвращает только первое вхождение вместо итерацию списка вхождений; поскольку вы используете foreach, вам нужны все вхождения. В противном случае foreach пытается перебрать что-то, что не является списком, и поэтому ваша переменная $achievement на самом деле является NULL, поэтому вы получаете сообщение об ошибке при попытке вызвать на нем ->find().

+0

Благодарим за быстрый ответ. Я изменил сценарий, как вы предлагали, но он продолжает работать с той же ошибкой. – snorpey

+0

Вы пытались сбросить содержимое '$ activeInactiveSplit [0]' и '$ activeInactiveSplit [1]' (через что-то вроде 'print_r ($ activeInactiveSplit)' и посмотреть, соответствуют ли они вашим ожиданиям? Аналогично, попробуйте сбросить то, что вы вернитесь из своего первого вызова 'find()' и посмотрите, что вы ожидаете. – Amber

+0

@Snorpey и, пожалуйста, нажмите на чек, чтобы принять ответ Дава, thx. – Don