Reputation: 224
<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>
i want to iterate over each div.reviews-summary but i am not getting to next p.reviews-title and li.rating__item rating__rated tag, and also count the li.rating__item rating__rated
for separate p
tag, and display integer value of no of li.rating__item rating__rated that are exist in ul
.and also check if A
exist then display li.rating__item rating__rated
of A.
<?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;
?>
i want display like this type of output,
Array
(
[overalldata] => Array
(
[a] => 4
[b] => 5
[c] => 4
)
)
Any body having any idea please help to sort it out. Thanks
Upvotes: 1
Views: 64
Reputation: 57121
Your HTML is (hopefully) slightly wrong. You have three sets of <p class="reviews-title">C</p>
, so all items are 'C'. But if you replace them with A and B, you could use the following code.
All it does is to store a count of the number of li[class=rating__item rating__rated]
items under the index of the lower case version of the <p class="reviews-title">
value...
$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);
I've updated the HTML to (so just replacing the A and 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>
This outputs...
Array
(
[overalldata] => Array
(
[a] => 3
[b] => 4
[c] => 2
)
)
Upvotes: 1