Удалите первую строку в CSV, а затем сохраните файл, перезаписав существующий

У меня есть файл CSV, который генерируется динамически. Я хочу удалить первую строку CSV, а затем сохранить ее снова.

Я гуглил и смог получить первую строку 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

И выходной файл пуст.

Ахмар

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);
3

Другие решения

У вас есть ошибки в вашем коде. Первое, что функция fgetcsv получает только одну строку, поэтому, если вы хотите извлечь все строки, вам нужен цикл. То же самое происходит с функция fputcsv.

Другой является то, что функция array_shift возвращает смещенное значение, поэтому вы присваиваете $ 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);
0