Escreva CSV para arquivo sem gabinetes no PHP

Existe uma function nativa ou uma class / biblioteca sólida para escrever uma matriz como uma linha em um arquivo CSV sem gabinetes? fputcsv será padrão para " se nada for passado para o parâmetro do gabinete. O Google está falhando em mim (retornando resultados para um monte de páginas sobre fputcsv ), e as bibliotecas de PEAR fazem mais ou menos as mesmas coisas que fputcsv .

Algo que funciona exatamente como fputcsv , mas permitirá que os campos permaneçam inquestionados.

atualmente: "field 1","field 2",field3hasNoSpaces

desejado: field 1,field 2,field3hasNoSpaces

Os avisos sobre os gabinetes anteriores são válidos, mas você disse que não se aplicam ao seu caso de uso.

Estou me perguntando por que você não pode usar algo assim?

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

funciona com function chr () :

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

Isso não funciona?

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

Well car(0) não funcionou, pois o valor NULL provavelmente irá sufocar a maioria dos analisadores csv.

Eu terminei usando fputcsv() para criar o arquivo inicial, então passou e fputcsv() todas aspas. Elegante? Talvez não, mas conseguiu fazer o trabalho :).

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

Isto é o que eu uso para colocar o CSV padrão em uma matriz …

 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; } 

Você pode então produzir o que quiser em um loop foreach.

A desvantagem com um arquivo CSV sem gabinetes significa que uma vírgula errada na input do usuário irá juntar a linha. Então você precisará remover vírgulas antes de escrever uma linha CSV.

A parte complicada com o processamento de CSV é a análise de gabinetes, o que torna as funções PHP & PEAR CSV valiosas. Essencialmente, você está procurando por um arquivo delimitado por vírgulas para colunas e linhas delimitadas para linhas. Aqui está um simples ponto de partida:

 < ?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) também trabalhou para mim:

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

Descobriu isso. Ao passar no código ascii para Null para a function car() , parece funcionar bem.

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

Obrigado pelas respostas de todos!