Записать CSV в файл без вложений в PHP - PullRequest
47 голосов
/ 26 ноября 2009

Есть ли встроенная функция или твердый класс / библиотека для записи массива в виде строки в CSV-файле без вложений? fputcsv по умолчанию будет ", если для параметра вложенности ничего не передано. Google подводит меня (возвращает результаты для целой пачки страниц около fputcsv), а библиотеки PEAR делают более или менее то же самое, что и fputcsv.

То, что работает точно так же, как fputcsv, но позволяет полям оставаться без кавычек.

в настоящее время: "field 1","field 2",field3hasNoSpaces

желательно: field 1,field 2,field3hasNoSpaces

Ответы [ 11 ]

57 голосов
/ 15 декабря 2009

Предупреждения о вышеупомянутых вложениях действительны, но вы сказали, что они не относятся к вашему варианту использования.

Мне интересно, почему ты не можешь просто использовать что-то подобное?

<?php
$fields = array(
    "field 1","field 2","field3hasNoSpaces"
);
fputs(STDOUT, implode($fields, ',')."\n");
13 голосов
/ 14 ноября 2012

работает с функцией chr () :

fputcsv($f,$array,',',chr(0));
4 голосов
/ 31 марта 2017

fputcsv($file, $data, ';', chr(127));

2 голосов
/ 05 декабря 2009

Ну, car(0) не сработало, поскольку значение NULL, скорее всего, задушит большинство парсеров csv.

Я закончил использовать fputcsv() для создания исходного файла, затем прошел и удалил все кавычки. Элегантный? Возможно нет, но это сделало работу:).

2 голосов
/ 26 ноября 2009

Разве это не работает?

fputcsv($fp, split(',', $line),',',' ');
1 голос
/ 05 августа 2016
<?php       

$filename = "sample.csv";
$handle = fopen($filename, 'w+');
fputcsv($handle, ['column 1','column 2']);
$data = ['sample','data'];

fputs($handle, implode($data,',')."\n");

// or

fwrite($handle, implode($data,',')."\n");

fclose($handle);
$headers = array(
    'Content-Type' => 'text/csv',
);
0 голосов
/ 23 августа 2018

Я использую хитрый способ удалить двойные кавычки, но только в Linux

....
fputcsv($fp, $product_data,"\t");
....
shell_exec('sed -i \'s/"//g\' /path/to/your-file.txt ');
0 голосов
/ 11 декабря 2015

chr(0) у меня тоже сработало:

 fputcsv($fp, $aLine, $sDelimiter, chr(0));
0 голосов
/ 26 ноября 2009

Разобрался. Передача кода ascii для Null в функцию car() кажется, что она работает просто отлично.

fputcsv($f, $array, $delimiter, car(0))

Спасибо за ответы всем !!!

0 голосов
/ 26 ноября 2009

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

Сложность при обработке CSV - это анализ корпусов, что делает функции PHP и PEAR CSV полезными. По сути, вы ищете файл, разделенный запятыми для столбцов и символ новой строки для строк. Вот простая отправная точка:

<?php
$col_separator= ',';
$row_separator= "\n";

$a= array(
 array('my', 'values', 'are', 'awes,breakit,ome'),
 array('these', 'values', 'also', "rock\nAND\nROLL")
);

function encodeRow(array $a) {
 global $col_separator;
 global $row_separator;
 // Can't have the separators in the column data!
 $a2= array();
 foreach ($a as $v) {
  $a2[]= str_replace(array($col_separator, $row_separator), '', $v);
 }
 return implode($col_separator, $a2);
}

$output= array();
foreach ($a as $row) {
 $output[]= encodeRow($row);
}

echo(implode($row_separator, $output));

?>
...