PHP: leggere un file .csv e ricavare un array

ATTENZIONE! Il post ha più di 2 anni e le informazioni contenute potrebbero essere obsolete (ad esempio a causa di un aggiornamento di versione rispetto agli elementi descritti o links modificati da siti esterni).

Una funzione per leggere un file .csv e ricavarne un array:


/**
* Apre un file .csv e ritorna un array.
*
* @param string $filepath Percorso completo del file
*/
function csvToArray($filepath){
 setlocale(LC_ALL, 'en_US.UTF-8');
 // apertura del file
 if (($handle = fopen($filepath, "r")) !== FALSE) {
  $nn = 0;
  // legge una riga alla volta fino alla fine del file
  while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
   // numero di elementi presenti nella riga letta
   $num_elementi = count($data);
   // popolamento dell'array
   for ($x=0; $x<$num_elementi; $x++) {
    $csvarray[$nn][$x] = $data[$x];
   }
   $nn++;
  }
  // Chiusura del file
  fclose($handle);
 } else {
  echo "File non trovato";
 }

 return $csvarray;
}

La riga



setlocale(LC_ALL, 'en_US.UTF-8');

deve rispecchiare la codifica con cui è stato salvato il file. Durante la lettura dell'array bisogna tenere in considerazione che la prima colonna corrisponde all'indice 0 dell'array, la seconda all'indice 1 e così via:


$array_csv = csvToArray('percorso/file.csv');
foreach($array_csv as $numero_riga => $valori){
 $valore_prima_colonna = $valori[0];
 $valore_seconda_colonna = $valori[1];

 echo 'riga: '.$numero_riga.' - valori: '.$valore_prima_colonna.' # '.$valore_seconda_colonna;
}

Commenti