PHP : 简单 DOM 解析器如何迭代此 html 代码
PHP : Simple DOM Parser how to iterate this html code
<div id="score">
<div class="name"><span style="width:68%">A</span></div>
<span class="roll">1</span>
<div class="name"><span style="width:60%">B</span></div>
<span class="roll">2</span>
<div class="name"><span style="width:56%">C</span></div>
<span class="roll">3</span>
</div>
我想遍历 div.name 的每个跨度,但我没有到达下一个 span.roll标签我已经使用过这段代码,如果 A 可用,则检查条件,然后显示 1 并与上面的名称相同以检查。
<?php
include("simple_html_dom.php");
$obj = new simple_html_dom();
foreach ($obj->find('div[id=score]') as $factor)
{
$item = $factor->find('div[class=name] span')->plaintext;
if(trim($item) == 'A')
{
$a = $factor->find('span[class=roll]',0)->plaintext;
}
if(trim($item) == 'B')
{
$b = $factor->find('span[class=roll]',1)->plaintext;
}
if(trim($item) == 'C')
{
$c = $factor->find('span[class=roll]',2)->plaintext;
}
$final_array['overalldata'] = array
(
'a'=> $a,
'b' => $b,
'c' => $c,
);
}
print_r($final_array);
die;
?>
任何人有任何想法请帮忙整理一下。谢谢
作为替代方案,由于您定位的是该 ID,因此您不需要在父元素上有 foreach
,直接获取它即可。
然后将 foreach
应用到它的子项上,得到 names 和 rolls.
想法是这样的:
$final_array['overalldata'] = null; // initialize
$factor = $obj->find('div[id=score]', 0); // get the parent
foreach ($factor->find('div[class=name]') as $item) { // each item of the parent
$name = $item->find('span', 0)->innertext; // get the name
$roll = $item->next_sibling()->innertext; // get the next sibling which is the roll
$final_array['overalldata'][$name] = $roll; // and assign it (push it inside the array)
}
print_r($final_array);
所以基本上,要获得 name
只需将每个 div
内的子对象作为目标,然后将 roll
作为目标(这是每个 [=14= 的兄弟姐妹) ]), 只需使用 ->next_sibling()
方法。
旁注:如果我是你,我会坚持 DOM
。它已经内置在 PHP 中,无需包含任何第三方库。
<div id="score">
<div class="name"><span style="width:68%">A</span></div>
<span class="roll">1</span>
<div class="name"><span style="width:60%">B</span></div>
<span class="roll">2</span>
<div class="name"><span style="width:56%">C</span></div>
<span class="roll">3</span>
</div>
我想遍历 div.name 的每个跨度,但我没有到达下一个 span.roll标签我已经使用过这段代码,如果 A 可用,则检查条件,然后显示 1 并与上面的名称相同以检查。
<?php
include("simple_html_dom.php");
$obj = new simple_html_dom();
foreach ($obj->find('div[id=score]') as $factor)
{
$item = $factor->find('div[class=name] span')->plaintext;
if(trim($item) == 'A')
{
$a = $factor->find('span[class=roll]',0)->plaintext;
}
if(trim($item) == 'B')
{
$b = $factor->find('span[class=roll]',1)->plaintext;
}
if(trim($item) == 'C')
{
$c = $factor->find('span[class=roll]',2)->plaintext;
}
$final_array['overalldata'] = array
(
'a'=> $a,
'b' => $b,
'c' => $c,
);
}
print_r($final_array);
die;
?>
任何人有任何想法请帮忙整理一下。谢谢
作为替代方案,由于您定位的是该 ID,因此您不需要在父元素上有 foreach
,直接获取它即可。
然后将 foreach
应用到它的子项上,得到 names 和 rolls.
想法是这样的:
$final_array['overalldata'] = null; // initialize
$factor = $obj->find('div[id=score]', 0); // get the parent
foreach ($factor->find('div[class=name]') as $item) { // each item of the parent
$name = $item->find('span', 0)->innertext; // get the name
$roll = $item->next_sibling()->innertext; // get the next sibling which is the roll
$final_array['overalldata'][$name] = $roll; // and assign it (push it inside the array)
}
print_r($final_array);
所以基本上,要获得 name
只需将每个 div
内的子对象作为目标,然后将 roll
作为目标(这是每个 [=14= 的兄弟姐妹) ]), 只需使用 ->next_sibling()
方法。
旁注:如果我是你,我会坚持 DOM
。它已经内置在 PHP 中,无需包含任何第三方库。