删除CSV中的第一行,然后保存文件覆盖现有

时间:2014-12-10 10:07:38

标签: php csv fgetcsv fputcsv

我有一个动态生成的CSV文件。我想删除第一行CSV,然后再次保存。

我已经google了,并且能够获得csv的第一行,但是在删除后再次写入它的部分是我被困住的地方。

这是示例

line1,data1
line2,data2
line3,data3

我想要实现的目标

line2,data2
line3,data3

删除第一行并再次保存文件

这是我的代码

$file = fopen('words.csv', 'r');
$data = fgetcsv($file,10000,",");
$data = array_shift($data);
$file = fopen('words.csv', 'w');
fputcsv($file,$data,",");
fclose($file);

我明白了: ! ) Warning: fputcsv() expects parameter 2 to be array, string given in C:\wamp\www\scrape\test.php on line 7

输出文件为空。

艾哈迈尔

2 个答案:

答案 0 :(得分:3)

// Read the file
$file = fopen('words.csv', 'r');

// Iterate over it to get every line 
while (($line = fgetcsv($file)) !== FALSE) {
  // Store every line in an array
  $data[] = $line;
}
fclose($file);

// Remove the first element from the stored array / first line of file being read
array_shift($data);

// Open file for writing
$file = fopen('words.csv', 'w');

// Write remaining lines to file
foreach ($data as $fields) {
    fputcsv($file, $fields);
}
fclose($file);

答案 1 :(得分:0)

您的代码中存在一些错误。第一个是fgetcsv function只获得一行,所以如果你想提取所有的行,你需要一个循环。 fputcsv function也是如此。

另一个是array_shift function返回移位的值,因此您将$ data分配给您不需要的字符串。

所以,我认为你的代码必须像:

$file = fopen('words.csv', 'r');
$data=array();
while (($data_tmp = fgetcsv($file, 1000, ",")) !== FALSE) {
       $data[] = $data_tmp;
}
fclose($file);
array_shift($data);
$file = fopen('words.csv', 'w');
foreach($data as $d){
    fputcsv($file,$d);
}
fclose($file);