Есть ли встроенная функция или сплошной класс / библиотека для записи массива в виде строки в CSV-файле без вложений? fputcsv
умолчанию будет "
если ничего не передано для параметра оболочки. Google не дает мне результатов (возвращает результаты для целого ряда страниц о fputcsv
), а библиотеки PEAR более или менее используют те же функции, что и fputcsv
.
Что-то, что работает точно так же, как fputcsv
, но позволит поля оставаться без кавычек.
в настоящее время: "field 1","field 2",field3hasNoSpaces
желательно: field 1,field 2,field3hasNoSpaces
Предупреждения о вышесказанном корпусе действительны, но вы сказали, что они не применяются к вашему прецеденту.
Мне интересно, почему вы не можете просто использовать что-то вроде этого?
<?php $fields = array( "field 1","field 2","field3hasNoSpaces" ); fputs(STDOUT, implode($fields, ',')."\n");
работает с функцией chr () :
fputcsv($f,$array,',',chr(0));
Разве это не работает?
fputcsv($fp, split(',', $line),',',' ');
Ну 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', );
fputcsv($file, $data, ';', chr(127));
Это то, что я использую для добавления стандартного 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)); ?>
chr(0)
также работал для меня:
fputcsv($fp, $aLine, $sDelimiter, chr(0));
Догадаться. Переходя в ascii-код для Null для функции car()
кажется, все работает отлично.
fputcsv($f, $array, $delimiter, car(0))
Спасибо за ответы всем !!!