PHP删除最后一行CSV文件

时间:2013-11-24 14:02:35

标签: php csv fgetcsv

仍在努力使用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行的大文件,有没有办法在不使用太多内存的情况下执行此操作?

1 个答案:

答案 0 :(得分: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);

我没有环境来测试这个,抱歉。