首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用PHP将现有的HTML表拆分为4个大小相等的表?

如何使用PHP将现有的HTML表拆分为4个大小相等的表?
EN

Stack Overflow用户
提问于 2013-07-08 19:12:14
回答 3查看 1.9K关注 0票数 -1

我正在工作的一个网站已经有大约140个HTML文件,每个文件包含一个不同的HTML表。每个表有10到大约400行,其中有2列。这是不符合标准的旧代码,目前我正试着凑合着用旧代码。

下面是一个例子:

代码语言:javascript
复制
<TABLE BORDER=0>
  <TR><TD><FONT SIZE=1>Row 1 Col 1</TD><TD WIDTH+20><FONT SIZE=1>Row 1 Col 2</TD><TR>
<TR><TD><FONT SIZE=1>Row 2 Col 1</TD><TD WIDTH+20><FONT SIZE=1>Row 2 Col 2</TD><TR>
<TR><TD><FONT SIZE=1>Row 3 Col 1</TD><TD WIDTH+20><FONT SIZE=1>Row 3 Col 2</TD><TR>
...
</TABLE>

我正在尝试在PHP中找到一种方法来计算表中有多少行,然后将这些行拆分为4个div。因此,如果我们有一个有100行的表。前25行将进入此div:

代码语言:javascript
复制
<div class="span3"><table>{first 25 rows go here}</table></div>

以此类推。

代码语言:javascript
复制
<div class="span3"><table>{next 25 rows go here}</table></div>
<div class="span3"><table>{next 25 rows go here}</table></div>
<div class="span3"><table>{next 25 rows go here}</table></div>

,直到我们最终得到类似的结果:

代码语言:javascript
复制
<div class="row-fluid">
  <div class="span3"><table>{first 25% rows go here}</table></div>
  <div class="span3"><table>{next 25% rows go here}</table></div>
  <div class="span3"><table>{next 25% rows go here}</table></div>
  <div class="span3"><table>{next 25% rows go here}</table></div>
</div>

所有这些都需要在不实际编辑现有表中的代码的情况下完成。有人知道我是怎么用PHP做到这一点的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-09 00:59:36

谢谢大家的建议。这就是我如何回答这个问题的,沿着DomDocument路线走下去。

代码语言:javascript
复制
 <?php

  $dom = new DOMDocument();

  //load the html
  $html = $dom->loadHTMLFile($path.$filename);

  //discard white space 
  $dom->preserveWhiteSpace = false; 

  //the table by its tag name
  $tables = $dom->getElementsByTagName('table'); 

  //get all rows from the table
  $rows = $tables->item(0)->getElementsByTagName('tr'); 

$numberofrows = $tables->item(0)->getElementsByTagName('tr')->length;

$numberincolumn = ceil($numberofrows / 4);

  $counter = 0;
echo '<div class="row-fluid"><div class="span3"><table>';
  // loop over the table rows

  foreach ($rows as $row) 
  { 


    if ($counter > 0 && $counter % $numberincolumn == 0){
    echo '</table></div><div class="span3"><table>';    
    }



   // get each column by tag name
      $cols = $row->getElementsByTagName('td'); 
   // echo the values  
      echo "<tr><td style='padding-left:10px;'>".$cols->item(0)->nodeValue.'</td>'; 
      echo "<td>".$cols->item(1)->nodeValue.'</td></tr>'; 
      $counter++;
    } 
    echo "</table></div></div>";
*/
?>
票数 1
EN

Stack Overflow用户

发布于 2013-07-08 20:14:51

我将使用DomDocument模型,如下所示:

代码语言:javascript
复制
$dom = new domDocument;
@$dom->loadHTML($html);
$rows = $dom->getElementsByTagName('tr');
票数 1
EN

Stack Overflow用户

发布于 2013-07-08 19:49:58

尝试链接此链接

代码语言:javascript
复制
$data = "<TABLE BORDER=0>
  <TR><TD><FONT SIZE=1>Row 1 Col 1</TD><TD WIDTH+20><FONT SIZE=1>Row 1 Col 2</TD><TR>
<TR><TD><FONT SIZE=1>Row 2 Col 1</TD><TD WIDTH+20><FONT SIZE=1>Row 2 Col 2</TD><TR>
<TR><TD><FONT SIZE=1>Row 3 Col 1</TD><TD WIDTH+20><FONT SIZE=1>Row 3 Col 2</TD><TR>
...
</TABLE>";
$data = array_shift($data); // first array (table) 
$rows = explode("<TR>",$data); // you will loose the <TR> so you will need to add the <TR> back on to the begining

$numrows = count($rows);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17525189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档