PHP - 更新 CSV 文件中的特定行


PHP - Update specific row in CSV file

有没有有效的方法来更新/删除CSV文件中的特定行?所有其他方法包括读取整个文件的内容,创建临时文件,然后用它替换旧文件等......但是,假设我有包含 10000 条记录的大型 CSV,因此这种解决方案将相当耗费资源。假设我无法使用数据库,因此写入文件是存储数据的唯一方法。所以,问题是,最有效的方法是什么?提前谢谢你!

你将不得不读取整个文件。 对不起,没办法。 CSV 是单个平面文本文件,其中包含随机大小的字段和行。

您绝对不应该直接使用 CSV 进行数据库操作。 您应该将数据拉入数据库以使用它,然后在完成后将其输出回CSV。

没有提到为什么你不能使用数据库,所以我会猜测这是一个资源问题,你也没有说为什么你不想重写文件,所以我会猜测这是由于性能。 您可以缓存多个操作并一次执行所有操作,但您不会避免重写文件的全部或至少部分。

考虑将

csv 逐行读取到多维数组中,并在某一行进行更改。然后,将数组数据导出为 csv。下面的示例修改第 100 行,假设有一个 6 列逗号分隔的 csv 文件 (0-5(。

现在,如果要删除该行,请通过有条件地跳到具有 continue 的下一个循环迭代来将其从数组$newdata排除。或者,如果要更新,只需将当前内部数组$newdata[$i]设置为新值:

$i = 0;
$newdata = [];
$handle = fopen("OldFile.csv", "r");
// READ CSV
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {      
    // UPDATE 100TH ROW DATA (TO EXCLUDE, KEEP ONLY $i++ AND continue)
    if ($i == 99) {
        $newdata[$i][] = somenewvalue;          
        $newdata[$i][] = somenewvalue;   
        $newdata[$i][] = somenewvalue;  
        $newdata[$i][] = somenewvalue;
        $newdata[$i][] = somenewvalue;
        $newdata[$i][] = somenewvalue;
        $i++;
        continue;
    }  
    $newdata[$i][] = $data[0];          
    $newdata[$i][] = $data[1];    
    $newdata[$i][] = $data[2];      
    $newdata[$i][] = $data[3];    
    $newdata[$i][] = $data[4];    
    $newdata[$i][] = $data[5];
    $i++;    
}
// EXPORT CSV
$fp = fopen('NewFile.csv', 'w');    
foreach ($newdata as $rows) {
    fputcsv($fp, $rows);
}    
fclose($fp);

将 CSV 分解为多个文件,全部在一个目录中。这样,您仍然需要重写文件,但您不必重写那么多。

有点晚了,但对于可能搜索相同内容的人来说,您可以将 csv 放入 sqlite 中,此外,您还可以在数据集中进行搜索。有一些示例代码:通过PHP将CSV文件导入SQLite数据库