Простой DOM парсер приводит к нескольким страницам - PullRequest
1 голос
/ 16 марта 2019

Я проанализировал страницу, чтобы получить заголовки, и иногда проанализированных заголовков больше 11. Мой разработанный шаблон содержит максимум 11 заголовков.Мой вопрос заключается в том, как скопировать шаблон () для остальных заголовков (от 12 до> n).Мне нужно как-то повторить шаблон для остальных результатов, но я точно не знаю как.Сильфон - мой шаблон, ведьма показывает все результаты.

<?php 
    include('parse/simple_html_dom.php'); 
    $url = 'link-to-url';
    $html = file_get_html($url);
    $headlines = array();
    $i = 0;
?>
<div class="pf w0 h0">
    <div class="w0 h0">
        <div class="header-pagina">
            <svg role="img"  class="header37"><use xlink:href="#header-hp"></use></svg>
        </div>

        <div class="page-wrapper">
            <?php 
           foreach($html->find('.cmsmasters_row[1] .cmsmasters_toggle_title') as $title) {
                    $i++;
                        echo '<div class="agenda-curs">';
                        echo '<div class="agenda-tab"><span class="modul-tab-text color1" contenteditable="true">Modulul '.$i.'</span></div>';   
                        echo '<div class="agenda-text" contenteditable="true">'.$headlines[] = $title->plaintext.'</div >';

                        echo '</div>';
            }
            $head = implode("", $headlines);
            ?>
        </div>
        <svg role="img" class="footer35"><use xlink:href="#footer35"></use></svg>
    </div>
</div>

1 Ответ

1 голос
/ 16 марта 2019

Я не знаю, для чего вы используете $head = implode("", $headlines); в своем скрипте, но вы сможете найти нужные данные из $headlines или headline_batch ниже.

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

<?php 
include('parse/simple_html_dom.php'); 
$url = 'link-to-url';
$html = file_get_html($url);
$headlines = array();
$counter = 0;
foreach($html->find('.cmsmasters_row[1] .cmsmasters_toggle_title') as $title) {
    $headlines[++$counter] = $title->plaintext;
}

// no more processing, just printing
foreach (array_chunk($headlines, 10, true) as $headline_batch) {
    ?>
    <div class="pf w0 h0">
        <div class="w0 h0">
            <div class="header-pagina">
                <svg role="img"  class="header37"><use xlink:href="#header-hp"></use></svg>
            </div>
            <?php

            foreach ($headline_batch as $counter => $title) {
                echo '<div class="agenda-curs">
                          <div class="agenda-tab"><span class="modul-tab-text color1" contenteditable="true">Modulul ' . $counter . '</span></div>
                          <div class="agenda-text" contenteditable="true">' . $title . '</div >
                      </div>';
            }

            ?>
            </div>
            <svg role="img" class="footer35"><use xlink:href="#footer35"></use></svg>
        </div>
    </div>
    <?php
}
?>

Использование array_chunk($headlines, 10, true) избавит вас от необходимости использовать условие модуля в вашем цикле, чтобы проверить, должна ли новая группаначать.Параметр true сохраняет значения $counter после разбиения на группы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...