2016-06-04 6 views
1

Aus irgendeinem Grund bekomme ich Rekursion bei der Verwendung von Simple DOM Parser Library.Rekursion mit PHP Simple DOM Parser

Mein HTML ist wie

<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> 

ich PHP-Skript erstellt, einzelne Datei enthalten

include_once('simple_html_dom.php'); 

Und ich versuche, über 15 und 25 Werte von HTML zu erhalten. Aber wenn ich

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

mein Skript ausführen gibt viel Rekursion - was mache ich falsch und wie kann ich diese 15 und 25 Werte richtig zu bekommen?

+0

simple_html_dom Objekte haben Referenzen auf ihre Eltern. Wenn also print_r() 'die untergeordneten Eigenschaften druckt, versucht es dann, die übergeordnete Eigenschaft zu drucken, die dann versucht, die untergeordneten Eigenschaften erneut zu drucken, und so weiter. – Barmar

Antwort

5

Verwenden Sie nicht print_r() oder var_dump() auf DOM-Objekten. Das DOM-Objekt verfügt über Eigenschaften, die sich auf seine untergeordneten Elemente und übergeordneten Elemente beziehen. Wenn also das untergeordnete Element gedruckt wird, muss es seine übergeordnete Eigenschaft drucken. Und wenn es das Elternteil druckt, muss es das Kind wieder drucken, so dass es in eine unendliche Rekursion gerät.

Wenn Sie 15 und 25 erhalten möchten, sollten Sie einen Selektor verwenden, der diesen Elementen entspricht. Durchlaufen Sie dann die Ergebnisse und drucken Sie den Text.

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

Danke! Es klappt! – moonvader