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

PHP实现CSV数据拆分:多世纪字段转双列多行格式

PHP实现CSV世纪列拆分单行对应格式

我来帮你搞定这个CSV拆分的需求!下面是完整的PHP实现代码,附带详细注释,能完美处理你描述的场景——把包含多个世纪的行拆分成每个世纪对应一行架号的双列CSV:

<?php
// 原CSV文件路径和新CSV输出路径,根据实际情况修改
$inputFile = 'input.csv';
$outputFile = 'output.csv';

// 尝试打开输入文件
if (!($inputHandle = fopen($inputFile, 'r'))) {
    die("无法打开输入文件: $inputFile");
}

// 尝试打开输出文件
if (!($outputHandle = fopen($outputFile, 'w'))) {
    die("无法创建输出文件: $outputFile");
}

// 读取表头行
$header = fgetcsv($inputHandle);
// 写入新的表头(确保是shelfmark和century)
fputcsv($outputHandle, ['shelfmark', 'century']);

// 循环处理每一行数据
while (($row = fgetcsv($inputHandle)) !== false) {
    // 获取架号和世纪字符串
    $shelfmark = trim($row[0]);
    $centuriesStr = trim($row[1]);
    
    // 拆分世纪字符串为数组,处理逗号+空格的分隔符
    $centuries = array_map('trim', explode(',', $centuriesStr));
    
    // 循环每个世纪,写入新行
    foreach ($centuries as $century) {
        // 跳过空值(如果有的话)
        if (!empty($century)) {
            fputcsv($outputHandle, [$shelfmark, $century]);
        }
    }
}

// 关闭文件句柄
fclose($inputHandle);
fclose($outputHandle);

echo "CSV拆分完成,输出文件: $outputFile";
?>

关键细节说明:

  • 文件路径:记得把$inputFile和$outputFile改成你实际的文件路径
  • 分隔处理:用explode(',', $centuriesStr)拆分世纪字符串,再用array_map('trim', ...)去掉每个世纪前后的空格,避免出现类似' 1200s'的无效数据
  • 表头处理:重新写入标准的shelfmark和century表头,确保输出格式统一
  • 异常处理:加入了文件打开失败的判断,避免脚本静默报错
  • 空值过滤:跳过拆分后可能出现的空字符串,保证输出数据的有效性

你只需要把原CSV放在指定路径,运行这个脚本就能得到拆分后的双列CSV文件啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:56:41