将CSV数据与php合并


merger the csv data with php?

有许多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标志告诉它附加内容而不是覆盖。