Записать CSV в файл без вложений в PHP
Вопрос
Существует ли встроенная функция или класс / библиотека для записи массива в виде строки в CSV-файле без вложений? fputcsv
будет по умолчанию равным "
, если для параметра вложенности ничего не передано. Google подводит меня (возвращает результаты для целой пачки страниц о fputcsv
), а библиотеки PEAR делают более или менее то же самое, что и fputcsv
.
Что-то, что работает точно так же, как fputcsv
, но позволяет полям оставаться без кавычек.
в настоящее время: «поле 1», «поле 2», field3hasNoSpaces
требуемый: поле 1, поле 2, field3hasNoSpaces
Решение
Предупреждения о вышеупомянутых вложениях действительны, но вы сказали, что они не относятся к вашему варианту использования.
Мне интересно, почему ты не можешь просто использовать что-то подобное?
<?php
$fields = array(
"field 1","field 2","field3hasNoSpaces"
);
fputs(STDOUT, implode($fields, ',')."\n");
Другие советы
работает с функцией chr () :
fputcsv($f,$array,',',chr(0));
fputcsv ($ file, $ data, ';', chr (127));
Код>
Разве это не работает?
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',
);
Я использую хитрый способ удалить двойные кавычки, но только в Linux
....
fputcsv($fp, $product_data,"\t");
....
shell_exec('sed -i \'s/"//g\' /path/to/your-file.txt ');
Это то, что я использую для помещения стандартного 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 & amp; 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))
Спасибо всем за ответы !!!