PHP:简单DOM解析器查找第N个元素类存在(PHP:Simple Dom Parser Find

2019-10-22 12:30发布

我使用的是PHP的简单DOM解析器解析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";
    }
}

但上面的foreach循环返回“发现”如果td.null存在。 但我需要找到,如果第二个元素的TD类为null我需要返回两个,如果第三TD元素类为null我需要返回三

我希望让你明白什么我要求的,所以请帮助我如何找到第n个元素类为null

Answer 1:

首先,我会做什么也是每个迭代td的直通的foreach。 这样你就可以把它分为哪些索引号键。 (请注意,当然它的索引是从零开始因此它实际上开始于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在第三盘,第三行内它的土地入第二。



Answer 2:

这是一个痛苦做这样的事情用简单的HTML DOM,如果切换到这一个 ,你就可以做这样的事情:

foreach($demo->find("td.null") as $td){
  echo $td->index;
}

还有许多其他的jQuery风格的东西,你会期望在一个现代的解析库。



文章来源: PHP:Simple Dom Parser Find Nth Element Class Exist