PHP: Leggere il contenuto di un file CSV.

Un file CSV è in un semplice file di testo formattato secondo determinate regole e compatibile con i principali programmi per la gestione di fogli elettronici come Excel, Calc (il foglio di calcolo di open Office) o Google Sheet.
CSV è la sigla di comma-separated values, cioè valori separati da virgola, ed è una tipologia di file che si usa per esportare o importare dati da una base di dati all’altra, questa non è la sua unica funzione ma la più coumune.
Anche se comma in inglese significa virgola, spesso le informazioni sono separate da punto e virgola, per il nostro esempio useremo il file dell’ISTAT sulle ripartizione regioni/province.

Il file è scaricabile da questo link

Riporto qui le prime 5 colonne delle 2 righe del file:

Codice ripartizione;Codice NUTS1 2006;Codice NUTS1 2010;"Ripartizione geografica (Maiuscolo)";Ripartizione geografica;
1;ITC;ITC;NORD-OVEST;Nord-ovest;1;

Come si può vedere nella prima linea sono contenute le intestazoni, nella seconda i valori, separati da punto e virgola e non da virgola.
Il simbolo che separa i valori è il “delimitatore” e è molto importante nella realizzaizione del nostro codice.
Quello che volgiamo fare è prendere una riga alla volta e impaginare i valori in una tabella HTML.

Per prima cosa assicuriamoci da avere il file CSV e il file PHP che chiameremo csv2table.php siano nella stessa cartella.
Cominciamo a digitare il seguente codice

//definiamo il delimitatore
$delimitatore = ';';

//apriamo il file in lettura e ci posizioniamo sulla prima riga
$file = fopen('ripartizioni_regioni_province.csv','r');

//stampiamo il tag di apertura della tabella
echo "<table-->";

// qui inseriremo il ciclo sui dati del file csv	

//stampiamo il tag di chiusra della tabella
echo "";

In pratica abbiamo definito il delimitatore e abbiamo aperto il file in lettura, poi abbiamo posizionato i 2 tag (apertura e chiusura) della tabella, tra questi due tag scriverermo il codice che prenderà di volta in volta una riga del file csv e produrrà una riga della tabella HTML.

Utilizzeremo la funzione php fgetcsv che rende una riga dal file precedentemente aperto e l’analizza in cerca di campi CSV, restituendo un array che contiene una cella per ogni campo.
Ecco il codice completo e funzionante.

//definiamo il delimitatore

$delimitatore = ';';

//apriamo il file in lettura e ci posizioniamo sulla prima riga
$file = fopen('ripartizioni_regioni_province.csv','r');

//stampiamo il tag di apertura della tabella
echo "<table>";

// qui inseriremo il ciclo sui dati del file csv
while (($linea = fgetcsv($file, 1000, $delimitatore)) !== false) {

    //leggo una linea alla volta del file csv
    //e la inserisco in una riga nella tabella HTML
	echo  "<tr>";
	foreach( $linea as $campo) echo "<td>".$campo."</td>";
	echo "<tr>";
}

//stampiamo il tag di chiusra della tabella
echo "</table>";

//chiudo il file
fclose($file);