将CSV的特定列保存到PHP中的另一个CSV文件中

时间:2018-09-04 01:30:26

标签: php csv

因此,尝试读取一个csv文件并从该文件中提取详细信息,并希望将csv的特定列存储到另一个csv文件中。

我设法提取了输入的csv文件的特定列,但不确定如何将提取的列写入另一个csv文件。

这是我工作的一部分:

$row = 1;
if (($handle = fopen("testtable.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        $row++;
        echo $data[0] . "\n" . $data[1] . "<br />\n";

    }
    $file = fopen("editedTable.csv","w");
    foreach ( $data as $line) {             //working on this part of the code
        fputcsv($file, explode(',',$line));
    }
    fclose($handle);
}

很显然,在我尝试弄清楚逻辑时,foreach循环中存在错误。

提取的数据基本上是第一列和第二列(data [0],data [1])。只需要将它写入另一个CSV文件。输入的csv只是一个以逗号分隔的5列文件。知道如何修改foreach循环并使用fputcsv方法吗?

谢谢

2 个答案:

答案 0 :(得分:1)

由于将fputs放在$ data初始循环之外,所以只捕获了一行,这是经过修改的代码。

     $row = 1;
     $file = fopen("editedTable.csv","w");

    if (($handle = fopen("testtable.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $num = count($data);
            $row++;
            echo $data[0] . "\n" . $data[1] . "<br />\n";
            $line = $data[0].", ".$data[1];
            $line .=  "\n";
            fputs($file, $line);
       }
      fclose($handle);
   }
   fclose($file);

答案 1 :(得分:1)

fputcsv在第二个参数上接受一个数组。

我认为这是您想要的:

<?php
$file = fopen("editedTable.csv","w");
$row = 1;
if (($handle = fopen("testtable.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000)) !== FALSE) {
        $num = count($data);
        $row++;
        echo $data[0] . "\n" . $data[1] . "<br />\n";
        fputcsv($file, [$data[0], $data[1]]);
    }
}
fclose($handle);
fclose($file);