Ecco la funzione che ho aggiunto alla mia biblioteca utilità per un utilizzo futuro. L'ho derivato da NSSec's answer.
Questa soluzione consente di specificare se si desidera utilizzare la prima riga come chiavi per l'array. Probabilmente aggiungerò la possibilità di passare un array da utilizzare per le chiavi per il parametro $ first_line_keys ad un certo punto.
/**
* 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()
fonte
2016-09-28 23:40:54
Sono arrivato a una soluzione simile. Ho letto il file e cercato la scheda in esso; se non si trova, presumo che il delimitatore sia una virgola. Quindi usa getscv come versione di php è 5.2. Anche se vedo alcuni difetti in questo, non riesco a pensare a qualcosa di meglio. – veli
Forse conteggiare tab e virgole (e altri delimitatori potenziali) sulla prima riga, quindi confrontarli con la seconda riga e così via. Qualunque sia la più consistente è il tuo probabile delimitatore. Una soluzione a due passaggi, sfortunatamente, ma spesso è il modo in cui si ha una tale sconosciuta. – Rikki