通过php取消设置行(基于行名称)csv

时间:2015-10-23 21:35:43

标签: php csv

我有一个带有静态列名的.CSV文件。我每天收到它,所以我必须每天自动编辑它。

在第一行是行名称,例如:row1; row2; row3,row4,row5

例如,当我想取消设置" row2"和" row4"。

如何根据名称取消设置多行?

我找到了一些关于根据行位置删除行或行的教程,但没有任何东西可以完全帮助我。

这就是现在的情况:

$inFile  = 'original.csv';
$outFile = 'edited.csv';

$delimiter = ';';
$enclosure = '"';   

$read = fopen($inFile, 'r');
$write = fopen($outFile, 'w');
if ($write && $read) {
    while (($data = fgetcsv($read)) !== FALSE) {

        // how to unset multiple row names

        fputcsv($write, $data, $delimiter, $enclosure);
    }
}
fclose($write);
fclose($read);

另外,当我打开原始文件时,是否需要使用分隔符和机箱?

1 个答案:

答案 0 :(得分:1)

您好,您可以尝试以下代码更新

$inFile  = 'original.csv';
$outFile = 'edited.csv';
$delimiter = ';';
$enclosure = '"';   
$removeFields = array('color');

$write = fopen($outFile, 'w');

if ($write) {
    $rows = file($inFile);
    $first = false;
    foreach($rows as $row) {
        $csvToPHP = str_getcsv($row, $delimiter, $enclosure);
        if (!$first) {
            $headers = array_flip($csvToPHP);
            $first = true;
        }

        foreach($removeFields as $remove) {
            unset($csvToPHP[$headers[$remove]]);
        }
        fputcsv($write, $csvToPHP, $delimiter, $enclosure);
    }   
}
fclose($write);

我使用了测试csv original.csv:

name,age,color
test1,20,red
test2,32,blue
test3,92,green
test4,12,red
test5,56,orange

结果edited.csv:

name
test1
test2
test3
test4
test5

希望它有所帮助。祝你好运!