簡體   English   中英

用 PHP 刪除或替換 CSV 文件的最后一行

[英]Remove or Replace last row of a CSV file with PHP

我正在嘗試更新 csv 文件的最后一行,使用以下代碼得到最后一行:

$f = public_path('MYCSV.csv');
$rows = file($f);
$last_row = array_pop($rows);
$data = str_getcsv($last_row);

我搜索了很多但沒有找到任何替換或至少刪除最后一行 csv 文件的方法,如果不使用 foreach 循環會很棒,因為文件大小很大......

代碼:(我沒有要測試的 Laravel,但我使用原始 php 進行了測試)

$f = public_path('MYCSV.csv');
$rows = file($f);
array_pop($rows);                       // remove final element/row from $array
file_put_contents($f, implode($rows));  // convert back to string and overwrite file

現在,如果您想在文件末尾添加新行,您只需要將新數據作為逗號分隔的字符串(帶有尾隨換行符)推送到$rows數組中。

如果您有包含此內容的 .csv 文件:

Sally Whittaker,2018,McCarren House,312,3.75
Belinda Jameson,2017,Cushing House,148,3.52
Jeff Smith,2018,Prescott House,17-D,3.20
Sandy Allen,2019,Oliver House,108,3.48

然后$rows數組,在array_pop()調用之后,將是:

array (
  0 => 'Sally Whittaker,2018,McCarren House,312,3.75
',
  1 => 'Belinda Jameson,2017,Cushing House,148,3.52
',
  2 => 'Jeff Smith,2018,Prescott House,17-D,3.20
')

*請注意,使用file()時換行符不會丟失——因此implode()不需要“膠水”。

調用file_put_contents()后,文件將被覆蓋:

Sally Whittaker,2018,McCarren House,312,3.75
Belinda Jameson,2017,Cushing House,148,3.52
Jeff Smith,2018,Prescott House,17-D,3.20
<?php try {
    $csv_path = 'MYCSV.csv';
    $fp = fopen($csv_path, 'r+');
    if ($fp) {
        $data = array();
        while ($row = fgetcsv($fp)) {
            $data[] = $row;
        }
        fclose($fp);


        array_pop($data);
        $fp = fopen($csv_path, 'w+');
        foreach($data as $key => $value) {
            fputcsv($fp, $value);
        }


    } else {
        throw new Exception("Failed to open file");
    }

} catch (Exception $e) {
    echo $e -> getMessage();
}?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM