PHP – Проблемы с бесконечным циклом

Я понятия не имею, что я делаю неправильно. КАЖДЫЙ раз, когда он проходит через него, он просто зацикливается и тянет все города, перечисленные в одной строке, и помещает их в состояние, а затем, когда он переходит в следующее состояние, он начинается в правильном месте, но все равно продолжает двигаться. Я пробовал в течение 4 часов, я просто не могу понять это.

$url = 'http://www.craigslist.org/about/sites'; $output = file_get_contents($url); $doc = new DOMDocument(); libxml_use_internal_errors(true); //Supress Warnings for HTML5 conversion issue $doc->loadHTML($output); libxml_use_internal_errors(false); //Start Showing Errors $xpath = new DOMXpath($doc); foreach ($xpath->query('//h1') as $e) { $country = $e->nodeValue; $list = array(); foreach ($xpath->query('./following-sibling::div[@class="colmask"]', $e) as $li) { foreach ($xpath->query('//div/h4', $e) as $div) { $state = $div->nodeValue; foreach ($xpath->query('./following-sibling::ul/li', $div) as $div2) { $href = $div2->getAttribute("href"); $text = trim(preg_replace("/[\r\n]+/", " ", $div2->nodeValue)); echo 'Country: ' . $country . ' State: ' . $state . ' CITY: text['. $text . '] href[' . $href . '] <br/><br/><br/>'; } } } } 

Related of "PHP – Проблемы с бесконечным циклом"

Вы должны избегать вложенных query как вы это делаете. Используйте скорее DOMNodeList, полученный на каждой итерации, с помощью метода item .

Например, вместо написания:

 foreach ($xpath->query('./following-sibling::div[@class="colmask"]', $e) as $li) { foreach ($xpath->query('//div/h4', $e) as $div) { $state = $div->nodeValue; 

Написать:

 $result = $xpath->query('./following-sibling::div[@class="colmask"]', $e); $state = $result->item(0)->nodeValue; 

Если вам нужно перейти из состояния DOMNode $state , используйте $state->parentNode , $state->nextSibling и / или $state->previousSibling

Если бы кто-то назвал DuffyDake, ответьте на мой вопрос. Вот ответ.

 foreach ($xpath->query('./following-sibling::ul[1]/li', $div) as $div2) { $href = $div2->getAttribute("href"); $text = trim(preg_replace("/[\r\n]+/", " ", $div2->nodeValue)); echo 'Country: ' . $country . ' State: ' . $state . ' CITY: text['. $text . '] href[' . $href . '] <br/><br/><br/>'; } 

Отсутствующий кусок – это [1], чтобы ссылаться на первый найденный UL, а не на то, что прошло