PHP: Cosa sono i file CSV e come manipolarli in tre righe

ATTENZIONE! Le informazioni in questo articolo sono valide per versioni di PHP >= 5.1.0

I file CSV (comma separated values) sono file di testo sui quali possiamo scrivere e leggere dati separati da virgola. Il vantaggio di utilizzare questi tipi di file è che sono molto leggeri e posso essere aperti da software come Microsoft Excel, Libre Office, Open Office e così via.

Molto spesso quando scriviamo software ci ritroviamo ad implementare funzionalità che riguardano il download di dati in formato csv. In questo breve articolo mostrerò come è possibile manipolare un file csv utilizzando poche righe di codice PHP.

1. Scrivere dati su un file .csv

La funzione offerta da PHP per la manipolazione di questo tipo di file è fputcsv che consente di formattare una riga di dati in formato .csv e di scriverla sul file che passiamo come handler.

Se vogliamo ad esempio salvare per ogni riga le informazioni inerenti i voti di un esame universitario che abbiamo sostenuto:

$exam = array('Mario Rossi', 'Corso di PHP', 30);

Per salvare questa riga su un file “exams.csv” ci basterà usare queste due istruzioni:

$file = fopen("exams.csv","a+"); 
fputcsv($file, $exam);
fclose($file);

Il codice sopra riportato apre il file in formato csv in modalità “append” ovvero aggiungendo righe in coda senza sovrascrivere le esistenti e se il file non è presente la funzione ne crea uno vuoto nella directory corrente. Passando l’handler $file e un array di dati, quello che otteniamo è la creazione di un file .csv con una riga contenente i dati dell’array $exam separati da virgole.

L’array $exam salvato sul file exams.csv

Una volta salvati i nostri dati sul file utilizziamo la funzione fclose per eliminare l’handler in memoria.

2. Leggere dati da un file .csv

Ipotizziamo invece di avere un file exams.csv dal quale dobbiamo leggere i dati in un array per poi poterli visualizzare a video. La procedura inversa consiste semplicemente nell’aprire il file in modalità lettura e scorrere ogni riga fino alla fine del file utilizzando la funzione fgetcsv.

$file = fopen("exams.csv", 'r');
$exams = array();
  
while($exam = fgetcsv($file, 0, ',')){
     $exams[] = $exam;
}
fclose($file);
print_r($exams);

La funzione fgetcsv riceve come paramentri: l’handler $file, un limitatore $length di lunghezza della riga ( 0 significa nessun limite ) e il delimitatore $delimiter utilizzato per separare i dati in formato csv ( nel nostro caso la virgola ). Ogni riga verrà quindi trasformata in un array costituito da tanti elementi quanti sono i dati separati dal delimitatore virgola.