2017-10-13 404 views
0

我试图合并多个CSV文件,但无法做到这一点。 请看看我的代码我不知道我的代码有什么问题。 csvfiles是一个包含多个相同格式文件的目录。合并多个CSV文件

Download Sample CSV Files

我的代码

$csvdir = "./csvfiles/"; 
$result = fopen('./csvfiles/merge.csv', 'w'); 
$test=""; 
if (is_dir($csvdir)) { 
    if ($handle = opendir($csvdir)){ 
     while (($file = readdir($handle)) !== false) { 
      if (substr($file, -4) === ".csv") { 
       $csvcontent = file_get_contents($file); 
       fwrite($result, $csvcontent); 
      } 
     } 
     closedir($handle); 
    } 
} 
fclose($result); 
+0

哪些错误你什么时候执行的代码怎么面对? – shahsani

+0

没有错误,逻辑上它应该合并文件,但用空白数据创建新的merge.csv文件 –

+0

这意味着你的任何'if(...)'条件都给出'false'结果。 – shahsani

回答

1

一些观察:

  • 在某些时候opendir($csvdir)还将包括您merge.csv文件。你想避免这种情况。保持它独立。

  • 将文件操作保持在最低限度。对于您的循环中的每个.csv文件,您都可以写入merge.csv。相反,收集数据以写入您的循环并只写一次。

  • 您收到的错误文件内容为file_get_contents($file);$file将只包含文件名,而不是完整的路径。

  • $test从不使用。

这里的工作代码:

<?php 

$csvdir = "./csvfiles/"; 
$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('./merge.csv', 'w'); 
fwrite($result, $csvcontent); 
fclose($result);