PHP: DOM Parser для итерации HTML-кода - PullRequest
0 голосов
/ 03 мая 2018
<div class="reviews-summary__stats">
                <div class="reviews-summary">
                    <p class="reviews-title">A</p>
                    <ul class="rating">
                        <li class="rating__item rating__rated"></li>
                        <li class="rating__item rating__rated"></li>
                        <li class="rating__item rating__rated"></li>
                        <li class="rating__item rating__rated"></li>
                        <li class="rating__item "></li>
                        <li class="rating__item "></li>
                    </ul>
                </div>
                <div class="reviews-summary">
                    <p class="reviews-title">B</p>
                    <ul class="rating">
                        <li class="rating__item rating__rated"></li>
                        <li class="rating__item rating__rated"></li>
                        <li class="rating__item rating__rated"></li>
                        <li class="rating__item rating__rated"></li>
                        <li class="rating__item rating__rated"></li>
                        <li class="rating__item "></li>
                    </ul>
                </div>
                <div class="reviews-summary">
                    <p class="reviews-title">C</p>
                    <ul class="rating">
                        <li class="rating__item rating__rated"></li>
                        <li class="rating__item rating__rated"></li>
                        <li class="rating__item rating__rated"></li>
                        <li class="rating__item rating__rated"></li>
                        <li class="rating__item "></li>
                        <li class="rating__item "></li>
                    </ul>
                </div>
</div>

Я хочу перебрать каждый div.reviews-summary , но я не перехожу к следующему p.reviews-title и li.rating__item rating__rated тег , а также подсчитайте li.rating__item rating__rated для отдельного тега p и отобразите целочисленное значение не из li.rating__item rating__rated , которые существуют в ul., а также проверьте, существует ли A, затем отобразите li.rating__item rating__rated А.

<?php
    include("simple_html_dom.php");
    $obj = new simple_html_dom();

    foreach ($obj->find('div[class=reviews-summary]') as $factor)
    {
        $item = $factor->find('p[class=reviews-title]')->plaintext;

        if(trim($item) == 'A')
        { 
            $a = $factor->find('li[class=rating__item rating__rated]',0)->plaintext;
        }
        if(trim($item) == 'B')
        { 
            $b = $factor->find('li[class=rating__item rating__rated]',0)->plaintext;
        }
        if(trim($item) == 'C')
        { 
            $c = $factor->find('li[class=rating__item rating__rated]',0)->plaintext;
        }
        $final_array['overalldata'] = array
        (
            'a' => $a,   // no of A have <li class="rating__item rating__rated"></li> 
            'b' => $b,
            'c' => $c,
        );
    }
    print_r($final_array);
    die;
?>

я хочу отображать как этот тип вывода, Массив ( [totaldata] => Массив ( [a] => 4
[b] => 5
[c] => 4
) )

Если у вас есть идея, пожалуйста, помогите разобраться Спасибо

1 Ответ

0 голосов
/ 03 мая 2018

Ваш HTML (надеюсь) немного неверен. У вас есть три набора <p class="reviews-title">C</p>, поэтому все предметы обозначены буквой «C». Но если вы замените их на A и B, вы можете использовать следующий код.

Все, что он делает, это сохраняет количество li[class=rating__item rating__rated] элементов под индексом строчной версии значения <p class="reviews-title"> ...

$final_array=array();
foreach ($obj->find('div[class=reviews-summary]') as $factor)
{
    $item = trim($factor->find('p[class=reviews-title]',0)->plaintext);
    $factor = count($factor->find('li[class=rating__item rating__rated]'));
    if($item == 'A')
    {
        $final_array['overalldata']['a']= $factor;
    }
    if($item == 'B')
    {
        $final_array['overalldata']['b']= $factor;
    }
    if($item == 'C')
    {
        $final_array['overalldata']['c']= $factor;
    }
}
print_r($final_array);

Я обновил HTML до (поэтому просто заменил A и B) ...

<div class="reviews-summary__stats">
    <div class="reviews-summary">
        <p class="reviews-title">A</p>
        <ul class="rating">
            <li class="rating__item rating__rated"></li>
            <li class="rating__item rating__rated"></li>
            <li class="rating__item rating__rated"></li>
            <li class="rating__item "></li>
            <li class="rating__item "></li>
        </ul>
    </div>
    <div class="reviews-summary">
        <p class="reviews-title">B</p>
        <ul class="rating">
            <li class="rating__item rating__rated"></li>
            <li class="rating__item rating__rated"></li>
            <li class="rating__item rating__rated"></li>
            <li class="rating__item rating__rated"></li>
            <li class="rating__item "></li>
            <li class="rating__item "></li>
        </ul>
    </div>
    <div class="reviews-summary">
        <p class="reviews-title">C</p>
        <ul class="rating">
            <li class="rating__item rating__rated"></li>
            <li class="rating__item rating__rated"></li>
            <li class="rating__item "></li>
            <li class="rating__item "></li>
        </ul>
    </div>     
</div>

Это выводит ...

Array
(
    [overalldata] => Array
        (
            [a] => 3
            [b] => 4
            [c] => 2
        )

)
...