You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CSV文件转换为左侧显示表头的HTML表格?

需求:将CSV转HTML表格时把表头移到左侧

当前用PHP代码将CSV文件转换为HTML表格,生成的表格表头位于顶部(横向表头),现在需要调整为表头在左侧(纵向表头),CSV数据显示在表头右侧。

原参考代码

<?php

$row = 1;
if (($handle = fopen("Book1.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++) {
            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);
}
?>

CSV文件格式说明

CSV第一行为表头(如姓名、年龄、性别等),后续每行为对应的数据记录。

修改后的代码(单表头对应单数据列)

这个版本会让每个表头单独占一行,右侧是所有数据行中该列的内容,是纵向表头的常见展示形式:

<?php
$headers = [];
$dataRows = [];

if (($handle = fopen("Book1.csv", "r")) !== FALSE) {
    $rowIndex = 0;
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        if ($rowIndex == 0) {
            // 存储表头数组
            $headers = $data;
        } else {
            // 存储所有数据行
            $dataRows[] = $data;
        }
        $rowIndex++;
    }
    fclose($handle);

    // 生成纵向表头表格
    echo '<table border="1">';
    foreach ($headers as $colIndex => $header) {
        echo '<tr>';
        // 左侧表头
        echo '<th>' . $header . '</th>';
        // 右侧对应所有数据
        foreach ($dataRows as $dataRow) {
            $value = !empty($dataRow[$colIndex]) ? $dataRow[$colIndex] : "&nbsp;";
            echo '<td>' . $value . '</td>';
        }
        echo '</tr>';
    }
    echo '</table>';
}
?>

另一种实现(单数据行对应全表表头)

如果需要每条数据记录单独一行,每行左侧依次排列所有表头、右侧对应数据:

<?php
$headers = [];
$dataRows = [];

if (($handle = fopen("Book1.csv", "r")) !== FALSE) {
    $rowIndex = 0;
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        if ($rowIndex == 0) {
            $headers = $data;
        } else {
            $dataRows[] = $data;
        }
        $rowIndex++;
    }
    fclose($handle);

    echo '<table border="1">';
    foreach ($dataRows as $dataRow) {
        echo '<tr>';
        foreach ($headers as $index => $header) {
            $value = !empty($dataRow[$index]) ? $dataRow[$index] : "&nbsp;";
            echo '<th>' . $header . '</th>';
            echo '<td>' . $value . '</td>';
        }
        echo '</tr>';
    }
    echo '</table>';
}
?>

代码核心思路

  1. 先遍历CSV文件,分离存储表头和数据行,避免边读边输出的横向结构限制
  2. 按照纵向表头的排版逻辑,重新组合表头与数据的对应关系
  3. 保留原代码的空值处理逻辑,确保空单元格显示空格

内容的提问来源于stack exchange,提问作者user19380275

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:15:28