Esta es la función que he añadido a mi biblioteca utilidades para su uso futuro. Lo obtuve de NSSec's answer.
Esta solución le permite especificar si desea usar la primera línea como claves para la matriz. Probablemente agregaré la capacidad de pasar una matriz para usar en el momento de las claves del parámetro $ first_line_keys.
/**
* Converts a CSV file into an array
* NOTE: file does NOT have to have .csv extension
*
* $file - path to file to convert (string)
* $delimiter - field delimiter (string)
* $first_line_keys - use first line as array keys (bool)
* $line_lenght - set length to retrieve for each line (int)
*/
public static function CSVToArray($file, $delimiter = ',', $first_line_keys = true, $line_length = 2048){
// file doesn't exist
if(!file_exists($file)){
return false;
}
// open file
$fp = fopen($file, 'r');
// add each line to array
$csv_array = array();
while(!feof($fp)){
// get current line
$line = fgets($fp, $line_length);
// line to array
$data = str_getcsv($line, $delimiter);
// keys/data count mismatch
if(isset($keys) && count($keys) != count($data)){
// skip to next line
continue;
// first line, first line should be keys
}else if($first_line_keys && !isset($keys)){
// use line data for keys
$keys = $data;
// first line used as keys
}else if($first_line_keys){
// add as associative array
$csv_array[] = array_combine($keys, $data);
// first line NOT used for keys
}else{
// add as numeric array
$csv_array[] = $data;
}
}
// close file
fclose($fp);
// nothing found
if(!$csv_array){
return array();
}
// return csv array
return $csv_array;
} // CSVToArray()
Vine a una solución similar. Leo el archivo y busco la pestaña; si no se encuentra, supongo que el delimitador es una coma. Entonces use getscv como versión de php es 5.2. Aunque veo algunos defectos en esto, no puedo pensar en nada mejor. – veli
Quizás cuente las pestañas y comas (y otros delimitadores potenciales) en la primera línea, luego compárelos con la segunda línea y así sucesivamente. Lo que sea más consistente es su delimitador probable. Una solución de dos pasos, desafortunadamente, pero ese es a menudo el camino cuando tienes un desconocido. – Rikki