【问题标题】:Count columns in a HTML table with PHP使用 PHP 计算 HTML 表中的列数
【发布时间】:2010-11-24 23:23:03
【问题描述】:

我有一个包含 html 表的基本字符串。该表如下所示:

<TR>
    <TD>asdf, dfg</TD><TD>0915</TD><TD>0945</TD><TD></TD><TD>15</TD><TD>45</TD><TD></TD><TD>1315</TD>
</TR>
<TR>
    <TD>asdf, dfg</TD><TD>0915</TD><TD>0945</TD><TD></TD><TD>15</TD><TD>45</TD><TD></TD><TD>1315</TD>
</TR>
<TR>
    <TD>asdf, dfg</TD><TD>0915</TD><TD>0945</TD><TD></TD><TD>15</TD><TD>45</TD><TD></TD><TD>1315</TD>
</TR>
<TR>
    <TD>asdf, dfg</TD><TD>0915</TD><TD>0945</TD><TD></TD><TD>15</TD><TD>45</TD><TD></TD><TD>1315</TD>
</TR>       

我将如何使用 PHP 来确定该表有多少列?

【问题讨论】:

  • 你想计算一个tr里面有多少td还是整个table里面有多少td?

标签: php html count html-table


【解决方案1】:

计数&lt;TD&gt;substr_count()。如果您的字符串包含多于一行,则计算&lt;TR&gt; 的数量并将&lt;TD&gt; 的总数除以&lt;TR&gt; 的数量。

【讨论】:

  • 数数的怎么样? :P
  • 首先,作者没有说明他的 html 可能格式错误。其次,将字符串“”放在 标签内,应该用相应的实体替换括号,这样它们就不会被substr_count()追上。
  • @Gorgapor - 不,它不能。如果字符串中存在“”,那么它就是 HTML,浏览器甚至会尝试以这种方式呈现它。如果是文本,它看起来像这样“<TD>”这显然不会触发 substr_count() 的命中。如果您确实有一个实际的、错误的“ ”,那么您的计数将仅因为 HTML 无效,而不是因为算法不正确而无效。
  • 同意彼得·贝利的观点,并投了赞成票。这比 Gorgapor 的方法容易得多,而且 Bailey 对实体的看法是正确的。
  • 是的,如果您的 HTML 保证有效,这是一个很好的方法。
【解决方案2】:

正如其他人所提到的,如果您保证有效的 HTML,并且保证表具有相等长度的行,则可以使用简单的字符串操作。拆分&lt;tr&gt;上的字符串,然后统计每段&lt;td&gt;的个数:

function count_table_columns($html) {
    $html = strtolower($html);
    $rows = split('<tr>', $html);
    foreach($rows as $row) {
        if(!trim($row)) { continue; }
        return substr_count($row, '<td>');
    }
}

如果存在 HTML 格式错误的可能性,请使用 HTML 解析器解析表格,然后遍历 &lt;tr&gt; 节点,并计算 &lt;td&gt; 类型的子节点。

这是一个需要考虑的 HTML 解析器: http://sourceforge.net/projects/simplehtmldom/

【讨论】:

    【解决方案3】:

    这是一个简单的htmldom代码,基本上是获取HTML表格的列数

    $table = $html->find('table',0);
    
    foreach($table->find('tr') as $tr)
                   {
                       $c=0;
                       foreach($tr->find('td') as $td) $c++;    
                       if( $c>$largest OR !isset($largest) ) $largest = $c; 
                   }
    

    $largest 会给你列数。

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签