Вопрос

Существует ли встроенная функция или класс / библиотека для записи массива в виде строки в 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))

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top