fputcsv добавляет строку, заканчивающуюся на последнем элементе

У меня есть базовый PHP-скрипт, который создает файл csv из массива. Вот пример кода:

$array = [ [1,2,3], [4,5,6] ]; $handle = fopen('test.csv', 'w'); foreach($array as $v) fputcsv($handle, $v); fclose($handle); 

Полученный файл всегда имеет пустую строку в конце файла, потому что fputcsv не знает, что это последняя строка. Любые (простые) идеи о том, как предотвратить это?

РЕДАКТИРОВАТЬ:

Оригинальный вопрос теперь не имеет значения (для меня, но, возможно, кому-то это понадобится). Предполагается, что fputcsv добавит новую строку, даже в конец документа, и это ожидаемое поведение всех файлов csv.

Я отметил ответ, который решает исходный вопрос, хотя он мне больше не подходит.

Поэтому в моем контексте мне нужно было проверить, является ли последняя строка (или любая строка) этого массива NULL (иначе PHP закончит предупреждение о том, что второй параметр fputcsv равен нулю). Вот мой обновленный сценарий, если кому-то интересно:

 $array = [ [1,2,3], [4,5,6] ]; $handle = fopen('test.csv', 'w'); foreach($array as $v) if($v != NULL) fputcsv($handle, $v); fclose($handle); 

Я нашел это решение по другому вопросу: https://stackoverflow.com/a/8354413/1564018

 $stat = fstat($handle); ftruncate($handle, $stat['size']-1); 

Я добавил эти две строки после fputcsv (), и они удалили последний новый символ строки, удалив пустую строку в конце файла.

Как и @Barmar, все строки имеют завершение строки, скажем \ n. То, что вы видите как пустую строку в конце файла, – это ваш редактор. По-настоящему пустая строка состоит из двух строк, заканчивающихся символами подряд. (например, \ n \ n)

Представьте, что у вас пустой файл:

 (EOF) 

Если вы fputcsv это: array (0, «привет», 3323), вы получаете

 (0,hello,3323\nEOF) 

данные PHP-документов:

fputcsv () форматирует строку (переданную как массив полей) как CSV и записывает ее ( завершается новой строкой ) в указанный дескриптор файла.

Тогда ожидается пустая строка в вашем редакторе. Но в файле нет такой вещи.

fputcsv добавляет новую строку после каждой строки, вот как она работает. Из документов :

fputcsv () форматирует строку (переданную как массив полей) как CSV и записывает ее (завершается новой строкой)

Новая строка в конце файла не является ошибкой или что-то, о чем вам нужно беспокоиться. Не пытайтесь удалить его, просто оставьте его.

В комментариях вы упомянули, что у вас есть ошибка:

Предупреждение: fputcsv () ожидает, что параметр 2 будет массивом, boolean

Вероятно, это fgetcsv неправильным использованием fgetcsv . Он возвращает FALSE когда он попадает в конец файла (новая строка). Документы показывают, как использовать его правильно:

 while (($data = fgetcsv($handle)) !== FALSE) { }