Подтвердить что ты не робот

Запись CSV в файл без корпусов в PHP

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

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

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

: field 1,field 2,field3hasNoSpaces

4b9b3361

Ответ 1

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

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

<?php
$fields = array(
    "field 1","field 2","field3hasNoSpaces"
);
fputs(STDOUT, implode($fields, ',')."\n");

Ответ 2

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

fputcsv($f,$array,',',chr(0));

Ответ 3

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

Ответ 4

Не работает ли это?

fputcsv($fp, split(',', $line),',',' ');

Ответ 5

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

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

Ответ 6

<?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',
);

Ответ 7

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

....
fputcsv($fp, $product_data,"\t");
....
shell_exec('sed -i \'s/"//g\' /path/to/your-file.txt ');

Ответ 8

Это то, что я использую для добавления стандартного 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.

Ответ 9

Недостаток файла 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));

?>

Ответ 10

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

 fputcsv($fp, $aLine, $sDelimiter, chr(0));

Ответ 11

Что не так со старым добрым fwrite()?

function encloseString($field){
    return ($field) ? '"' . $field . '"' : null;
}

$delimiter = ';';
$data = ["data_field_1", "data_field_2", "data_field_3"];

$fp = fopen("some-file.csv", 'w');

for($i = 0;$i<100000;$i++) {
    fwrite($fp, implode($delimiter, array_map('encloseString', $data) . "\n");
}

fclose($fp);

(Очевидно, вам нужно убедиться, что данные в $ data сначала экранированы)

Ответ 12

Выяснил это. Передавая в ascii-код для Null функции car(), она работает нормально.

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

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