从 CSV 文件中删除行
我有 4 列的 .csv 文件。删除与第一列 id 相同的行的最简单方法是什么?这就是我陷入困境的地方:
if($_GET['id']) {
$id = $_GET['id'];
$file_handle = fopen("testimonials.csv", "rw");
while (!feof($file_handle) ) {
$line_of_text = fgetcsv($file_handle, 1024);
if ($id == $line_of_text[0]) {
// remove row
}
}
fclose($file_handle);
}
不幸的是,数据库不是一个选择。
I have .csv file with 4 columns. What's the easiest way to remove a line identical with the id of the first column? Here's where I got stuck:
if($_GET['id']) {
$id = $_GET['id'];
$file_handle = fopen("testimonials.csv", "rw");
while (!feof($file_handle) ) {
$line_of_text = fgetcsv($file_handle, 1024);
if ($id == $line_of_text[0]) {
// remove row
}
}
fclose($file_handle);
}
Unfortunately, databases were not a choice.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我最近在取消订阅新闻通讯时做了类似的事情,这是我的代码:
这使用临时文件方法逐行写出 csv 以避免内存错误。然后,一旦创建了新文件,它就会删除原始文件并重命名临时文件。
您可以修改此代码,以便它查找 ID 而不是电子邮件地址,例如:
I recently did a similar thing in for a newsletter unsubscription, heres my code:
this uses the temp file method of writing out the csv line by line to avoid memory errors. Then once the new file has been created, it deletes the original and renames the temp file.
You can modify this code so that it looks for an ID instead of an email address eg:
我找到了一个解决方案,不需要复制文件。
注意:这些 fopen 命令中只有一个可能会失败,从而泄漏第二个命令的句柄。最好独立检查两个句柄并在出现错误时关闭它们。
I have found a solution, that does not need to copy the file.
Note: only one of those fopen commands could fail, leaking the handle for the second one. It would be good, to check both handles independetly and close them on a error.
您可以这样做:
基本上,您运行每一行并检查 id 是否不与 get 参数中发送的 id 匹配,如果不则将该行写入新的容器/变量。
然后将
$new
值重写到文件中,这应该可以正常工作:0
行上有 CSV 标头吗?You can do:
basically you run through each line and check if the id does NOT match the id sent in the get parameter, if it does not then it writes the line to the new container / variable.
And then rewrite the
$new
value to the file, this should work ok:0
?