2016-08-04 3 views
-2

мой HTML код КОД повторяется 16 раз:лучший способ с Simple HTML DOM Parser

<div class="headline_image"> 
<a ga-cat="slideshow-view" ga-action="view-1" href="mylink"><img src="http://dd4994.jpg" width="420" height="323" align="right" alt="my text "/></a> 
</div> 

Я хочу получить все ГИМ ссылки и текст также HREF, что я сделал:

for ($x = 0; $x <= 15; $x++) { 
$imglink = $html->find('div[class=headline_image] img', $x)->getAttribute('src'); 
$mytext = $html->find('div[class=headline_image] img', $x)->getAttribute('alt'); 
$postlink = $html->find('div[class=headline_image] a', $x)->getAttribute('href'); 
    echo '<br/>'; 
    echo $mytext; 
    echo '<br/>'; 
    print_r($postlink); 
    echo '<br/>'; 
    } 

код медленно изменяется?

+1

вы каждый раз просматриваете весь дом для каждого вызова find(). Найдите элемент КОНТЕЙНЕР всех этих разделов, а затем вы можете настроить свое сканирование с этого момента. –

+0

, не могли бы вы привести мне пример? извините, что это должно быть глупо. – user2686117

ответ

0

Вы замедляете свой код, используя слишком много анонимных объектов. Это означает, что вы не поместите результат функции в переменную, а просто используйте ее «в пути». Это необходимо для повторного запуска вашей функции и замедления вашего проекта.

Поскольку вы можете использовать функцию find для возврата массива, я советую вам сделать это перед циклом for.

$imgarray = $html->find('div[class=headline_image] img', $x); 

Таким образом, вы запустите $html->find ровно один раз, а не шестнадцать раз. В цикле for вы можете использовать его как массив и работать с результатами: $imgarray[$x]. Вы делаете то же самое для $anchorarray, и ваш код ускорится, вы увидите.

Альтернативное решение использует PHP DOM $childNodes на контейнере, в котором этот 16 элемент может быть найден (или элемент тела). Это вернет шестнадцать элементов div, в которых вы можете перемещаться по телефону $firstChild для элемента <a> и $ firstChild снова для элемента <img>. Вероятно, это более безопасно в случае, если вы хотите внести изменения в веб-сайте (например, добавление больше контента конечному и т.д.)

+0

Спасибо! что вы думаете о новом коде? – user2686117

0

Эй Daniel я изменил код:

$imgarray = $html->find('div[class=headline_image] img'); 
$linkarray = $html->find('div[class=headline_image] a'); 
for ($x = 0; $x <= 15; $x++) { 

echo $imgarray[$x]->getAttribute('src'); 
    echo '<br/>'; 
    echo $imgarray[$x]->getAttribute('alt'); 
    echo '<br/>'; 
    echo $linkarray[$x]->getAttribute('href'); 
    echo '<br/>'; 

    } 
0

В целом надлежащим образом для итерации выглядит так:

foreach($html->find('div') as $div){ 
    echo $div; 
} 
Смежные вопросы