after setting the delimiter '\t' fgetcsv() truncates the value when it is empty string
workaround:
<?php
$file = new SplFileObject($path);
$file->setFlags(SplFileObject::DROP_NEW_LINE);
while ($file->valid()) {
$line = $file->fgets();
$line = explode("\t", $line);
print_r($line);
}
?>
SplFileObject::fgetcsv
(PHP 5 >= 5.1.0)
SplFileObject::fgetcsv — Obtiene la línea de el fichero y analiza como campos CSV
Descripción
$delimiter = ","
[, string $enclosure = "\""
[, string $escape = "\\"
]]] )Obtiene la línea de el fichero que es está en formato CSV y devuelve un array conteniendo los campos leídos.
Parámetros
-
delimiter -
El delimitador de campo (sólo un caracter). Por omisión es una coma o el valor establecido por SplFileObject::setCsvControl().
-
enclosure -
El caracter de delimitación (sólo un caracter). Por omisión son comillas dobles o el valor establecido por SplFileObject::setCsvControl().
-
escape -
El caracter de escape (sólo un caracter). Por omisión es un backslash (\) o el valor establecido por SplFileObject::setCsvControl().
Valores devueltos
Devuelve un array indexado conteniendo los campos leídos, o FALSE en caso de error.
Nota:
Una línea en vlanco en un fichero CSV será devuelto como un array constituido como un campo
NULLa menos que se establezcaSplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE, en este caso se omiten las líneas vacías.
Ejemplos
Ejemplo #1 Ejemplo de SplFileObject::fgetcsv()
<?php
$fichero = new SplFileObject("datos.csv");
while (!$fichero->eof()) {
var_dump($fichero->fgetcsv());
}
?>
Ejemplo #2 Ejemplo de SplFileObject::READ_CSV
<?php
$fichero = new SplFileObject("animales.csv");
$fichero->setFlags(SplFileObject::READ_CSV);
foreach ($fichero as $fila) {
list($animal, $clase, $patas) = $fila;
printf("Un %s es un %s con %d legs\n", $animal, $clase, $patas);
}
?>
Contenido de animales.csv
cocodrilo,reptil,4 delfín,mamífero,0 pato,ave,2 koala,mamífero,4 salmon,pez,0
El resultado del ejemplo sería algo similar a:
Un cocodrilo es un reptil con 4 patas Un delfín es un mamífero con 0 patas Un pato es un ave con 2 patas un koala es un mamífero con 4 patas Un salmon es un pez con 0 patas
Ver también
- SplFileObject::setCsvControl() - Establece el delimitador y caracter de encierro del CSV
- SplFileObject::setFlags() - Establece flags para el SplFileObject
- SplFileObject::READ_CSV
- SplFileObject::current() - Recupera la línea actual del fichero
Note that due to bugs 55807 and 61032, introduced in 5.3.8, if the csv in example #2 has a newline character at the end of each line, the foreach will execute 6 times.
The last time through the loop $row will be bool(false). This is true even if using SplFileObject::SKIP_EMPTY and SplFileObject::DROP_NEW_LINE.
Until the bug is fixed, the workaround is to also add SplFileObject::READ_AHEAD to your setFlags() call.
