有许多CSV
文件,如:a.csv
, b.csv
, aab.csv
等
它们保存相同的列和标题。现在我想把所有的csv数据放入whole.csv
。只有一个标题。我该怎么做呢?
a.csv
data:
header1 title post.....
test who posand
b.csv
data:
header1 title post.....
head she pnow
等等……
whole.csv将包含所有csv数据。如:
header1 title post.....
head she pnow
test who posand
我尝试了以下代码。I want to:
$csvs = glob("*.csv");
foreach($csvs as $csv) {
$row = 1;
if (($handle = fopen($csv, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$fp = fopen("whole.csv", 'w');
fputcsv($fp, $data);
$row++;
}
fclose($handle);
}
}
我把所有的CSV文件放在同一个目录下。
对于每个输入的csv文件,您正在以写模式打开生成的csv文件:
$fp = fopen("whole.csv", 'w');
擦除whole.csv
的内容!!
您只需要在循环外打开whole.csv
文件一次,并继续向其中写入内容。
$csvs = glob("*.csv");
$fp = fopen("whole.csv", 'w');
foreach($csvs as $csv) {
$row = 1;
if (($handle = fopen($csv, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
fputcsv($fp, $data);
$row++;
}
fclose($handle);
}
}
看看file_put_contents
。
您将打开每个CSV文件,然后使用file_put_contents
传递whole.csv
作为$filename
参数,文件句柄作为$data
参数,并使用FILE_APPEND
标志告诉它附加内容而不是覆盖。