1

有很多CSV文件,如下所示:a.csv,b.csvaab.csv

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

a.csv数据:

header1 title post.....

test   who  posand

b.csv数据:

header1 title post.....

head   she  pnow

ETC .....

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

4

2 回答 2

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);
  }
}
于 2012-12-28T09:34:56.917 回答
0

看看file_put_contents

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

于 2012-12-28T14:29:09.827 回答