2013-08-23 30 views
2

我對php很新,但一直在使用'fgetcsv'將CSV文件轉換爲html表格並相當成功地進行了實驗。使用php導入特定的行和列形式的csv文件到表格中使用php

但是,我也有一個包含70列和700行的大型CSV文件,但我只想在一個表中顯示第1至47列和第3至21行,然後在另一個表中顯示第22至44行中的相同列。

我會很感激一些幫助,這,下面是我目前使用的代碼:

<?php 

$row = 1; 
if (($handle = fopen("CSV/test.csv", "r")) !== FALSE) { 

    echo '<table border="1">'; 

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     if ($row == 1) { 
      echo '<thead><tr>'; 
     }else{ 
      echo '<tr>'; 
     } 

     for ($c=0; $c < $num; $c++) { 
      //echo $data[$c] . "<br />\n"; 
      if(empty($data[$c])) { 
       $value = "&nbsp;"; 
      }else{ 
       $value = $data[$c]; 
      } 
      if ($row == 1) { 
       echo '<th>'.$value.'</th>'; 
      }else{ 
       echo '<td>'.$value.'</td>'; 
      } 
     } 

     if ($row == 1) { 
      echo '</tr></thead><tbody>'; 
     }else{ 
      echo '</tr>'; 
     } 
     $row++; 
    } 

    echo '</tbody></table>'; 
    fclose($handle); 
} 
?> 

回答

0
<?php 

$row = 1; 

if(($handle = fopen("CSV/test.csv", "r")) !== false) { 

    $table1 = $table2 = '<table border="1">'; 

    while (($data = fgetcsv($handle, 1000, ",")) !== false) { 

     $table1Add = $table2Add = false; 
     if($row >=3 && $row <= 21) 
      $table1Add = true; 
     if($row >=22 && $row <= 44) 
      $table2Add = true; 

     $num = count($data); 

     if($row == 1) { 

      $table1 .= '<thead><tr>'; 
      $table2 .= '<thead><tr>'; 

      for($c = 1; $c <= 47; $c++) { 
       $value = empty($data[$c]) ? "&nbsp;" : $data[$c]; 

       $table1 .= '<th>'.$value.'</th>'; 
       $table2 .= '<th>'.$value.'</th>'; 
      } 

      $table1 .= '</tr></thead><tbody>'; 
      $table2 .= '</tr></thead><tbody>'; 

     } else { 

      if($table1Add) $table1 .= '<tr>'; 
      if($table2Add) $table2 .= '<tr>'; 

      for($c = 1; $c <= 47; $c++) { 
       $value = empty($data[$c]) ? "&nbsp;" : $data[$c]; 

       if($table1Add) $table1 .= '<td>'.$value.'</td>'; 
       if($table2Add) $table2 .= '<td>'.$value.'</td>'; 
      } 

      if($table1Add) $table1 .= '</tr>'; 
      if($table2Add) $table2 .= '</tr>'; 

     } 

     $row++; 

    } 

    $table1 .= '</tbody></table>'; 
    $table2 .= '</tbody></table>'; 
    fclose($handle); 

    echo $table1; 
    echo $table2; 
} 
?> 
0

的列試試這個

for ($c=0; $c < 47; $c++) { 
     //echo $data[$c] . "<br />\n"; 
     if(empty($data[$c])) { 
      $value = "&nbsp;"; 
     }else{ 
      $value = $data[$c]; 
     } 
     if ($row == 1) { 
      echo '<th>'.$value.'</th>'; 
     }else{ 
      echo '<td>'.$value.'</td>'; 
     } 
    } 

所以您打印列0和列之間的細胞47. 對於行必須設置計數器,並在while語句內使用if來打印所需範圍內的行。如果你不需要其他人,最好在第44行之後設置退出條件。

相關問題