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
相关产品推荐
相关产品推荐

