array - Escribir CSV en archivo sin gabinetes en PHP
create a csv using php (10)
¿Esto no funciona?
fputcsv($fp, split('','', $line),'','','' '');
¿Existe una función nativa o una clase / biblioteca sólida para escribir una matriz como una línea en un archivo CSV sin recintos? fputcsv
usará de forma predeterminada "
si no se transfiere nada para el parámetro del gabinete. Google me está fallando (devolviendo resultados para un montón de páginas sobre fputcsv
), y las bibliotecas de PEAR hacen más o menos lo mismo que fputcsv
.
Algo que funciona exactamente como fputcsv
, pero permitirá que los campos permanezcan sin comillas.
actualmente: "field 1","field 2",field3hasNoSpaces
deseado: field 1,field 2,field3hasNoSpaces
Bueno, el car(0)
no funcionó ya que el valor NULL
probablemente estrangulará a la mayoría de los analizadores csv.
Terminé usando fputcsv()
para construir el archivo inicial, luego fputcsv()
y fputcsv()
todas las comillas. ¿Elegante? Tal vez no, pero hizo el trabajo :).
Esto es lo que uso para poner el CSV estándar en una 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;
}
A continuación, puede generar lo que desee en un ciclo foreach.
La desventaja de un archivo CSV sin gabinetes significa que una coma errante en la entrada del usuario arruinará la fila. Por lo tanto, deberá eliminar las comas antes de escribir una fila CSV.
La parte difícil de manejar CSV es el análisis de gabinetes, lo que hace que las funciones PHP y PEAR CSV sean valiosas. Básicamente, estás buscando un archivo delimitado por comas para las columnas y delimitado por la nueva línea para las filas. Aquí hay un punto de partida simple:
<?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));
?>
Las advertencias sobre los gabinetes anteriores son válidas, pero ha dicho que no se aplican a su caso de uso.
Me pregunto por qué no puedes usar algo como esto.
<?php
$fields = array(
"field 1","field 2","field3hasNoSpaces"
);
fputs(STDOUT, implode($fields, '','')."/n");
Lo averigué. Al pasar el código ascii para Null a la función car()
parece funcionar bien.
fputcsv($f, $array, $delimiter, car(0))
Gracias por las respuestas a todos !!!
funciona con la función chr () :
fputcsv($f,$array,'','',chr(0));
fputcsv($file, $data, '';'', chr(127));
chr(0)
también funcionó para mí:
fputcsv($fp, $aLine, $sDelimiter, chr(0));
<?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'',
);