我正在使用PHP Simple DOM Parser来解析HTML页面,现在我特别缺乏如何找到第n个元素类应该是一个特定的类
例如:
<table>
<tr>
<th class="h1">ONE</td>
<th class="h2">TWO</td>
<th class="h3">THREE</td>
</tr>
<tr>
<td class="one">Apple</td>
<td class="two">Orange</td>
<td class="null">N/A</td>
</tr>
<tr>
<td class="one">Apple</td>
<td class="null">N/A</td>
<td class="three">Banana</td>
</tr>
</table>
表格看起来像这样,所以我通过tr
遍历表格foreach ($demo->find("tr") as $val)
{
if(is_object($val->find('td.null', 0))
{
echo "FOUND";
}
}
但如果存在td.null,则上述foreach循环返回“FOUND”。 但我需要找到第二个元素td类是否为null我需要返回为TWO,如果第三个td元素类为null我需要返回为三
我希望你明白我所要求的,所以请帮助我如何找到第n个元素类为null
答案 0 :(得分:1)
首先,我要做的是通过foreach迭代每个td
。这样您就可以获得它所属的索引号键。 (注意,它的索引当然是零,因此它实际上从0
开始。)
然后在内部循环中,检查该类是否为null
,然后将其映射到相应的单词1 = one, 2 = two, etc..
。
粗略的例子:
$map = array(1 => 'one', 2 => 'two', 3 => 'three');
foreach ($demo->find('tr') as $tr) { // loop each table row
// then loop each td
foreach($tr->find('td') as $i => $td) { // indexing starts at zero
if($td->class == 'null') { // if its class is null
echo $map[$i+1]; // map it to its corresponding word equivalent
}
}
}
所以在这种情况下,这会输出three
然后输出two
。在第二个表格行中,null
落在第三个行中,第三行内部落入第二个行。
答案 1 :(得分:0)
使用简单的html dom做这样的事情是很痛苦的,如果切换到this one,你将可以做以下事情:
foreach($demo->find("td.null") as $td){
echo $td->index;
}
以及在现代解析库中期望的许多其他jquery风格的东西。