【问题标题】:Php parse html dom and count specific rowsphp解析html dom并计算特定行
【发布时间】:2012-05-13 10:31:53
【问题描述】:

我正在使用“简单的 php DOM 解析器”来解析一个 html 表并计算它的行​​数。

我解决了用这段代码计算其中的所有行(tr):

$rows = $table->find('.trClass');
$count = count($rows);
echo $count;

我正确地得到了表中所有行的数量。

现在我只想计算包含特定 td (带有特定字符串)的行。
我们可以假设我只想用这个 td 计算行数:

<td class="tdClass" align="center" nowrap="">TARGET STRING</td>

如何修改第一个代码以匹配此范围?

我尝试使用“preg_match”或“preg_match_all”,但我没有太多经验,所以我错过了正确的语法..我想。

非常感谢任何帮助!

【问题讨论】:

    标签: php parsing dom preg-match preg-match-all


    【解决方案1】:

    怎么样:

    <?php
    $targetString = 'TARGET STRING';
    $rows = $table->find('.trClass');
    
    $count = 0;
    foreach($rows as $row) {
        foreach($row->find('td') as $td) {
            if ($td->innertext === $targetString) {
                $count++;
                break;
            }
        }
    }
    

    【讨论】:

    • 非常感谢,但您的代码显示错误:“语法错误,意外 '(',需要 T_STRING 或 T_VARIABLE 或 '{' 或 '$' in”,指的是“foreach ($row->('td') as $td) {" line..
    • 好的,我找到了错误的解决方案(你错过了“find”),现在效果很好!非常感谢!!!
    • 是的,对不起,我错过了那个。复制粘贴显然出了问题:)。现在也在代码中修复它。
    • 别担心,再次感谢。现在我在这方面面临着更大的挑战。您可以在这里找到新问题:stackoverflow.com/questions/10453380/…
    • 好的,我去看看。实际上,这并不是一个更大的挑战。
    【解决方案2】:
    $target = 'TARGET STRING';
    
    $n_matchingrows = 0;
    
    $rows = $table->find('tr.trClass');
    foreach($rows as $row) {
        $cell = $row->find('td.tdClass[align=center][nowrap=""]', 0);
        if ($cell and $cell->innertext===$target) {
           $n_matchingrows += 1;
        }
    }
    

    【讨论】:

    • 这种方法的小错误,如果一个TR有多个TD的目标字符串,你的计数会是错误的;)。
    • 为了回答你的疑问,目标字符串在每个匹配行中只能包含一次(匹配行只有一个TD的目标字符串)
    猜你喜欢
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2013-08-15
    • 2011-05-18
    • 2012-08-24
    相关资源
    最近更新 更多