Запись CSV в файл без вложений на PHP
Существует ли собственная функция или солидный класс / библиотека для записи массива в виде строки в CSV-файл без вложений? fputcsv
будет по умолчанию "
, если ничего не передается для парама вложения. Google меня подводит (возвращает результаты для целой кучи страниц о fputcsv
), и библиотеки PEAR делают более или менее то же самое, что и fputcsv
.
Что-то, что работает точно так же, как fputcsv
, но позволит полям оставаться без кавычек.
В настоящее время: "field 1","field 2",field3hasNoSpaces
Желаемое: field 1,field 2,field3hasNoSpaces
11 ответов:
Предупреждения о предыдущих приложениях действительны, но вы сказали, что они не применимы к вашему варианту использования.
Мне интересно, почему вы не можете просто использовать что-то вроде этого?<?php $fields = array( "field 1","field 2","field3hasNoSpaces" ); fputs(STDOUT, implode($fields, ',')."\n");
Ну
car(0)
не сработало, так как значениеNULL
, скорее всего, задушит большинство парсеров csv.Я закончил использовать
fputcsv()
для построения исходного файла, затем прошел и удалил все кавычки. Элегантный? Может быть, и нет, но он выполнил свою работу :).
<?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', );
Это то, что я использую, чтобы поместить стандартный CSV в массив...
function csv_explode($delim=',', $str, $enclose='"', $preserve=false){ $resArr = array(); $n = 0; $expEncArr = explode($enclose, $str); foreach($expEncArr as $EncItem){ if($n++%2){ array_push($resArr, array_pop($resArr) . ($preserve?$enclose:'') . $EncItem.($preserve?$enclose:'')); }else{ $expDelArr = explode($delim, $EncItem); array_push($resArr, array_pop($resArr) . array_shift($expDelArr)); $resArr = array_merge($resArr, $expDelArr); } } return $resArr; }
Затем вы можете вывести все, что хотите, в цикле foreach.
Обратная сторона с 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)); ?>