Удалить или заменить последнюю строку файла CSV с PHP - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь обновить последнюю строку CSV-файла. Я получаю последнюю строку с использованием этого кода:

$f = public_path('MYCSV.csv');
$rows = file($f);
$last_row = array_pop($rows);
$data = str_getcsv($last_row);

Я много искал, но не нашел способа заменить или хотя быудалите последнюю строку csv-файла, будет здорово, если не использовать цикл foreach, так как размер файла большой ...

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Код: (У меня нет Laravel для тестирования, но я тестировал с сырым php)

$f = public_path('MYCSV.csv');
$rows = file($f);
array_pop($rows);                       // remove final element/row from $array
file_put_contents($f, implode($rows));  // convert back to string and overwrite file

Теперь, если вы хотите добавить новую строку в конец вашего файла, вы будетепросто нужно вставить новые данные в виде строки через запятую (с завершающим символом новой строки) в массив $rows.

Если у вас есть файл .csv с таким содержимым:

Sally Whittaker,2018,McCarren House,312,3.75
Belinda Jameson,2017,Cushing House,148,3.52
Jeff Smith,2018,Prescott House,17-D,3.20
Sandy Allen,2019,Oliver House,108,3.48

Тогда массив $rows после вызова array_pop() будет иметь вид:

array (
  0 => 'Sally Whittaker,2018,McCarren House,312,3.75
',
  1 => 'Belinda Jameson,2017,Cushing House,148,3.52
',
  2 => 'Jeff Smith,2018,Prescott House,17-D,3.20
')

* Обратите внимание, что символы новой строки не теряются при использовании file(), поэтому «склейка» отсутствуетнеобходимо с implode().

После вызова file_put_contents() файл будет перезаписан с:

Sally Whittaker,2018,McCarren House,312,3.75
Belinda Jameson,2017,Cushing House,148,3.52
Jeff Smith,2018,Prescott House,17-D,3.20
0 голосов
/ 17 октября 2018
<?php try {
    $csv_path = 'MYCSV.csv';
    $fp = fopen($csv_path, 'r+');
    if ($fp) {
        $data = array();
        while ($row = fgetcsv($fp)) {
            $data[] = $row;
        }
        fclose($fp);


        array_pop($data);
        $fp = fopen($csv_path, 'w+');
        foreach($data as $key => $value) {
            fputcsv($fp, $value);
        }


    } else {
        throw new Exception("Failed to open file");
    }

} catch (Exception $e) {
    echo $e -> getMessage();
}?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...