代码之家  ›  专栏  ›  技术社区  ›  user2653322

使用php将csv文件中的特定行和列导入到表中

  •  2
  • user2653322  · 技术社区  · 12 年前

    我对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);
    }
    ?>
    
    2 回复  |  直到 12 年前
        1
  •  0
  •   Michał Prajsnar    12 年前
    <?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
  •  0
  •   Babu887    12 年前

    对于列,请尝试以下操作

    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行之后设置一个退出条件。