用 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 循环会很好,因为文件很大...
<?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();
}?>
代码:(我没有 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()
.
不需要 "glue"
调用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
我正在尝试更新 csv 文件的最后一行,我使用以下代码得到了最后一行:
$f = public_path('MYCSV.csv');
$rows = file($f);
$last_row = array_pop($rows);
$data = str_getcsv($last_row);
我搜索了很多但没有找到任何方法来替换或至少删除 csv 文件的最后一行,如果不使用 foreach 循环会很好,因为文件很大...
<?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();
}?>
代码:(我没有 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