Я внес пару изменений, но включил пару версий, так как они по-разному форматируют данные. Я думаю, что основная проблема заключалась в том, что когда вы используете 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">
элементов (я думаю, это то, что вы просите).