<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;
?>
任何有任何想法的机构请帮忙解决。感谢
答案 0 :(得分:0)
作为替代方案,由于您要定位该ID,因此您无需在父元素上使用foreach
,只需直接获取即可。
然后对其子项应用foreach
,获取名称和 roll 。
以下是这个想法:
$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
(每个div
的兄弟姐妹) ,只需使用->next_sibling()
方法。
旁注:如果我是你,我会坚持DOM
。它已经内置在PHP中,不需要包含任何第三方库。