PHP:Simple Dom 解析器找到第 N 个元素 Class 存在

PHP:Simple Dom Parser Find Nth Element Class Exist

我正在使用 PHP 简单 DOM 解析器来解析 HTML 页面,现在我缺少如何找到第 n 个元素的具体要点 class应该是一个特定的 class

例如:

<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>

table 看起来像这样,所以我正在通过 tr

遍历 table
foreach ($demo->find("tr") as $val) 
{
   if(is_object($val->find('td.null', 0))
    {
      echo "FOUND";
    }
}

但是上面的foreach循环returns "FOUND" if td.null存在。 但是我需要找到第二个元素 td class 是否为 null 我需要 return 作为两个,如果第三个 td 元素 class 为空我需要 return 作为三个

我希望你明白我的要求,所以请帮助我如何找到第 n 个元素 class 是 null

首先,我要做的也是通过 foreach 迭代每个 td。这样你就可以得到它属于哪个索引号键。 (请注意,当然它的索引是从零开始的,所以它实际上从 0 开始)。

然后在内层循环中,只要检查class是否为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。在第二行 table 内,null 落在第三行,在第三行内它落在第二行。

使用简单的 html dom 做这样的事情很痛苦,如果你切换到 this one 你将能够做这样的事情:

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

以及您在现代解析库中期望的许多其他 jquery 风格的东西。