【问题标题】:PHP to remove last line of CSV filePHP删除CSV文件的最后一行
【发布时间】:2013-11-24 14:02:34
【问题描述】:

仍在为 PHP 和 CSV 文件操作而苦苦挣扎。我会尽量正确地问这个问题,以便我能得到一些帮助。

我有一个包含大约 4000 行/行的 CSV 文件,我编写了这段代码来创建整个 CSV 的数组,并将 CSV 文件的最后一行拉出以在我的脚本中使用。该代码适用于所有这些成功。

// CREATE ASSOCIATIVE ARRAY FROM LAST ROW OF CSV FILE
$csv = array();
if (FALSE !== $handle = fopen("Alabama-TEST.csv", "r"))
{
while (FALSE !== $row = fgetcsv($handle))
{
 $csv[] = $row; 
}
}
$new_csv = array();
foreach ($csv as $row)
{
$new_row = array();
for ($i = 0, $n = count($csv[0]); $i < $n; ++$i)
{
$new_row[$csv[0][$i]] = $row[$i]; 
}
$new_csv[] = $new_row;
}

变量 $new_row 是 CSV 中的最后一行,我可以正常使用数据。但是当脚本完成运行后,我想删除最后一行名为 $new_row。

这是顶部视图中我的 CSV 文件的示例;

CITY        ADDRESS        STATE      NAME
Birmingham  123 Park St.   Alabama    Franky

所以我只想删除最后一行并将标题保留在顶部,以便下次运行脚本时。我已经尝试了 3 天的时间来解决这个问题,所以我希望知道他们在做什么的好心人可以提供帮助。

这是我试图删除最后一行的代码;

$inp = file('Alabama-TEST.csv');
$out = fopen('Alabama-TEST.csv','w');
or ($i=0;$i<count($inp)-1;$i++)
fwrite($out,$inp[$i]);
fclose($out);

由于我使用的是大约 4000 行的大文件,有没有办法在不使用太多内存的情况下做到这一点?

【问题讨论】:

  • 既然 $n 保存了行数,为什么 "$i
  • 我展示的代码可以完美地获取变量 $new_row,所以没有任何问题 - 我正在寻找在脚本再次运行之前删除最后一行。我假设通过删除 $new_row 可以做到这一点。我将在我尝试删除最后一行的代码上方添加。
  • 你的意思是要写一个没有最后一行的Alabama-TEST.csv的新版本?
  • @nrathaus - 是的,这正是我想要做的。

标签: php csv fgetcsv


【解决方案1】:

您需要在阵列 ($new_csv) 上使用 array_pop 并使用 fputcsv 来保存文件:

array_pop($new_csv); // Removes the last element in the array
$out = fopen('Alabama-TEST-new.csv','w');
foreach ($new_csv as $row) { // sorry for writing it badly, try now
 fputcsv($out, $row);
}
fclose($out);

抱歉,我没有测试环境。

【讨论】:

  • 谢谢 - 试过了,它运行没有错误 - 不幸的是它没有删除 CSV 中的最后一行 - 我认为你真的很接近,因为它无论如何都没有破坏 CSV 文件。
  • 您是否注意到我故意编辑了 Alabama-TEST-new.csv 而不是原始文件? :)
  • 抱歉 - 我没有使用 Alabama-TEST-new.csv - 我会再试一次
  • 我这样做是为了防止覆盖您的原始文件,您是否使用相同的文件名没有看到任何修改?
  • 好一个!那个新文件是完美的。唯一的问题是我想使用新的 CSV 再次运行脚本,然后再一次......
猜你喜欢
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多