-1

私が取り組んでいる Web サイトには既に約 140 個の HTML ファイルがあり、各ファイルには異なる HTML テーブルが含まれています。各テーブルには、2 列で 10 から約 400 の行があります。これは標準を満たしていない古いコードであり、現時点ではその古いコードで間に合わせようとしています。

次に例を示します。

<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 に入ります。

<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 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でこれを行う方法を知っている人はいますか?

4

3 に答える 3

1

皆さん、ヒントをありがとう。これが私が質問に答えた方法であり、DomDocument ルートをたどります。

 <?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>";
*/
?>
于 2013-07-08T16:59:35.790 に答える
0

これをリンクしてみてください

$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);
于 2013-07-08T11:49:57.673 に答える