【问题标题】:Import specific rows and columns form csv file into table using php使用php将特定行和列从csv文件导入表
【发布时间】:2013-08-23 11:52:04
【问题描述】:

我对 php 很陌生,但我已经相当成功地尝试使用“fgetcsv”引入 CSV 文件并将其转换为 html 表。

但是我也有一个包含 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);
}
?>

【问题讨论】:

    标签: php csv fgetcsv


    【解决方案1】:
    <?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;
    }
    ?>
    

    【讨论】:

      【解决方案2】:

      对于列试试这个

      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 来打印您需要的范围内的行。如果不需要其他条件,最好在 while 中设置退出条件,以便在第 44 行之后退出。

      【讨论】:

        猜你喜欢
        • 2013-02-09
        • 1970-01-01
        • 2014-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多