如何合并多个CSV文件而不重复标题(使用PHP)?

我在PHP中非常菜鸟,当我将几个csv文件与此代码结合时,将显示几个标头。我怎样才能留下一个标题?

我正在使用带有PHP 7.1的ubuntu 18.04服务器

<?php

$csvdir = "./csv";
$csvcontent = '';
if (is_dir($csvdir)) {
    if ($handle = opendir($csvdir)) {
        while (($file = readdir($handle)) !== false) {
            if (substr($file,-4) === ".csv") {
                $csvcontent .= file_get_contents($csvdir . $file);
            }
        }
        closedir($handle);
    }
}

$result = fopen('./todos.csv','w');
fwrite($result,$csvcontent);
fclose($result);
?>
daihongze 回答:如何合并多个CSV文件而不重复标题(使用PHP)?

这还有一个好处,就是不需要您将整个结果文件保存在内存中。

$files = []; // use your existing code to build a list of files

$first = true;
$out = fopen('todos.csv','wb');

foreach( $files as $file ) {
  $in = fopen($file,'rb');

  $line = fread($in); // get the header line

  // write only the first file's header
  if( $first ) {
    fwrite($out,$line);
    $first = false;
  }

  // transcribe the rest of the file.
  while( $line = fread($in) ) {
    fwrite($out,$line);
  }

  fclose($in);
}

fclose($out);
,

根据this answer的示例代码,获取文件内容后跳过第一行:

$content = file_get_contents($filename);
$lines = explode("\n",$content);
$skipped_content = implode("\n",array_slice($lines,2));

您可以像这样修改代码(尽管就我个人而言,我可能只是简单地更改了csv文件的生产方式以停止生成标头...因为爆炸内容可能会减慢您的处理速度)。

<?php

$got_headers = 0;
$csvdir = "./csv";
$csvcontent = '';
if (is_dir($csvdir)) {
  if ($handle = opendir($csvdir)) {
    while (($file = readdir($handle)) !== false) {
      if (substr($file,-4) === ".csv") {
        if (empty($got_headers)) {

          // get the headers the first time only
          $csvcontent .= file_get_contents($csvdir . $file);
          $got_headers = 1;
        } else {

          // now,pull the lines after the first
          $content = file_get_contents($csvdir . $file);
          $lines = explode("\n",$content);

          $csvcontent .= implode("\n",1));
        }
      }
    }
    closedir($handle);
  }
}

$result = fopen('./todos.csv','w');
fwrite($result,$csvcontent);
fclose($result);
本文链接:https://www.f2er.com/3169393.html

大家都在问