PHP:简单的Dom Parser查找第N个元素类存在

时间:2015-04-03 05:06:10

标签: php html simple-html-dom

我正在使用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

2 个答案:

答案 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风格的东西。