<div class = "reviews-summary__stats">
<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 "></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 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>
Я хочу перебрать каждый div.reviews-summary, но я не добираюсь до следующего тега p.reviews-title и li.rating__item rating__rated, а также подсчитываю li.rating__item rating__rated для отображения 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;
?>
я хочу отображать как этот тип вывода,
Множество
(
[overalldata] => Массив
(
[a] => 3
[b] => 4
[c] => 2
)
)
а также подсчитать его li.rating__item rating__rated, и отобразить целочисленное значение отсутствия li.rating__item rating__rated в списке
Любой орган, имеющий какое-либо представление, пожалуйста, помогите разобраться в этом. Спасибо
Взгляните на PHP DomDocument






Я внес пару изменений, но включил несколько версий, поскольку они по-разному форматируют данные. Я думаю, что основная проблема заключалась в том, что когда вы используете find(), это может возвращать список найденных элементов, поэтому при настройке $a и т. д. Вы использовали второй параметр для выбора plaintext первого элемента (используя ,0), вы этого не сделали. Не делайте этого при поиске значения $item. Так что я добавил то же самое к этому призыву.
$final_array=array();
foreach ($obj->find('div[class=reviews-summary]') as $factor)
{
$item = $factor->find('p[class=reviews-title]',0)->plaintext;
if (trim($item) == 'A')
{
$final_array['overalldata']['a'] = $factor->find('li[class=rating__item rating__rated]',0)->plaintext;
}
if (trim($item) == 'B')
{
$final_array['overalldata']['b'] = $factor->find('li[class=rating__item rating__rated]',0)->plaintext;
}
if (trim($item) == 'C')
{
$final_array['overalldata']['c'] = $factor->find('li[class = "rating__item rating__rated"]',0)->plaintext;
}
}
print_r($final_array);
Это дает (с вашими образцами данных) ...
Array
(
[overalldata] => Array
(
[c] =>
)
)
В качестве альтернативы ...
$final_array=array();
foreach ($obj->find('div[class=reviews-summary]') as $factor)
{
$a = null;
$b = null;
$c = null;
$item = trim($factor->find('p[class=reviews-title]',0)->plaintext);
$factor = $factor->find('li[class=rating__item rating__rated]');
$count = count($factor);
if ($item == 'A')
{
$a = $factor[0]->plaintext;
}
if ($item == 'B')
{
$b = $factor[0]->plaintext;
}
if ($item == 'C')
{
$c = $factor[0]->plaintext;
}
$final_array['overalldata'] = array
(
'a' => $a,
'b' => $b,
'c' => $c,
'count' =>$count
);
}
print_r($final_array);
При немного измененном наборе тестовых данных дает ...
Array
(
[overalldata] => Array
(
[a] =>
[b] =>
[c] => Some content
)
)
Обновлять:
Я обновил второй пример, я перенес часть общего кода в основную часть. $count - это просто количество элементов <li class = "rating__item rating__rated"> (я думаю, это то, о чем вы просите).
спасибо @nigel ren, небольшая проблема решена, я также считаю li [class = rating__item rating__rated], чтобы отобразить рейтинг
Извините - не понимаю, что вы имеете в виду под второй частью.
я отображаю как этот тип вывода, Массив ([overalldata] => Массив ([a] => 4 [b] => 4 [c] => 4)), а также, если li.rating__item rating__rated, тогда подсчитайте его и отобразите целочисленное значение no li.rating__item rating__rated существует в списке
Я изменил второй пример кода, посмотрите, поможет ли это.
решение, пожалуйста :) @nigel ren
Куда вы загружаете HTML?