2016-06-04 4 views
1

По какой-то причине я получаю рекурсию при использовании Simple DOM Parser Library.Рекурсия с использованием PHP Simple DOM Parser

Мой HTML похож

<div id="root"> 
    <div class="some_div">some text</div> 
    <div class="field_1 misc1"><a href="#">Some text link</a> <strong>15</strong></div> 
    <div class="field_2 misc2"><a href="#">Some text link</a> <strong>25</strong></div> 
</div> 

Я создал скрипт, включен один файл

include_once('simple_html_dom.php'); 

И я стараюсь, чтобы получить 15 и 25 значений из HTML выше. Но когда я бегу

$ret = $html->find('div[id=root]'); 
print_r($ret); 

мой сценарий возвращает много рекурсии - то, что я делаю неправильно и как я могу получить эти 15 и 25 значений правильно?

+0

объекты simple_html_dom имеют ссылки на своих родителей. Поэтому, когда 'print_r()' печатает дочерние свойства, он затем пытается напечатать родительское свойство, которое затем пытается снова напечатать дочерние свойства и т. Д. – Barmar

ответ

5

Не используйте print_r() или var_dump() на объектах DOM. Объект DOM имеет свойства, которые относятся к его дочерним и родительским объектам. Поэтому, когда он печатает дочерний элемент, ему необходимо распечатать его родительское свойство. И когда он печатает родителя, ему нужно снова напечатать дочерний элемент, чтобы он попал в бесконечную рекурсию.

Если вы хотите получить 15 и 25, вам следует использовать селектор, соответствующий этим элементам. Затем проведите через результаты и распечатайте текст.

$ret = $html->find('#root strong'); 
foreach ($ret as $field) { 
    echo $field->plaintext; 
} 
+0

Спасибо! Оно работает! – moonvader

Смежные вопросы