用php合并csv数据?

时间:2012-12-28 09:31:47

标签: php

有许多CSV个文件,如下所示:a.csvb.csvaab.csv等。

他们拥有相同的列和标题。现在我想将所有csv数据放入whole.csv。只有一个标题。我该怎么办?

a.csv数据:

header1 title post.....

test   who  posand

b.csv数据:

header1 title post.....

head   she  pnow

等......

whole.csv将包含所有csv数据。 例如:

header1 title post.....

head   she  pnow
test   who  posand

我尝试了以下代码。但是没有得到我想:

$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文件放在同一目录中。

2 个答案:

答案 0 :(得分:1)

对于每个输入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);
  }
}

答案 1 :(得分:0)

看看file_put_contents

您将打开每个CSV文件,然后使用file_put_contents作为whole.csv参数传递$filename,将文件句柄作为$data参数并使用FILE_APPEND } flag告诉它附加内容而不是覆盖。