Nelle guide precedenti dedicate alla gestione di file abbiamo analizzato le funzioni che ci consentono di manipolare semplici file di testo. Capita spesso però di dover gestire tipologie di file differenti da un file .txt
, tra cui: file CSV, file JSON, file XML.
In questa guida ci concentriamo sulle funzioni che il linguaggio offre per leggere e scrivere dati su file CSV.
Indice dei contenuti
L'acronimo CSV sta per Comma-Separated Values e, come dice il nome stesso è un formato di file dove i dati sono un elenco di valori separati da una virgola. Viene utilizzato per importare ed esportare tabelle di dati.
In questo formato, ogni riga della tabella è rappresentata da una linea di testo, che a sua volta è divisa in campi (le singole colonne) separati da un apposito carattere separatore, ciascuno dei quali rappresenta un valore.
La seguente tabella di esempio
Nome | Cognome | Città |
---|---|---|
Mario | Rossi | Roma |
John | O'Really | New York |
Angelica | Ramos | London |
può essere rappresentata in formato CSV in questo modo
Mario;Rossi;Roma
John;O'Really;New York
Angelica;Ramos;London
In generale, in un file CSV si dovrebbero rispettare le seguenti regole:
I file CSV hanno estensione .csv
e vengono utilizzati spesso nei fogli di calcolo elettronici come ad esempio Microsoft Excel o LibreOffice Calc.
Per quanto riguarda il separatore non esiste uno standard comune: nei paesi anglosassoni viene utilizzata la virgola, mentre in Italia e altri paesi latini il punto e virgola.
Per creare o scrivere un file CSV in PHP è possibile utilizzare la funzione fputcsv()
che prende come argomenti il puntatore al file e un array di stringhe da scrivere nel file.
La funzione restituisce il numero di byte scritti oppure false
in caso di errore.
Di seguito è mostrato un esempio di utilizzo
<?php
$filename = 'users.csv';
$users = [
['Cristiano', 'Ronaldo', 'Portogallo'],
['Gonzalo', 'Higuain', 'Argentina'],
['Giorgio', 'Chiellini', 'Italia']
];
$handler = fopen($filename, 'w');
foreach($users as $user) {
fputcsv($handler, $user, ';');
}
fclose($handler);
Tramite un foreach scriviamo nel file tutti gli elementi dell'array $users
, separando i valori tramite il punto e virgola (riga 12).
È possibile specificare un terzo parametro (opzionale) della funzione, ossia il carattere delimitatore. Di default è la virgola, mentre nell'esempio abbiamo utilizzato il punto e virgola.
Leggere un file CSV è altrettanto semplice. PHP mette a disposizione la funzione fgetcsv()
che preso un puntatore al file restituisce una riga letta dal file in questione oppure false
.
Tramite un ciclo while possiamo quindi leggere l'intero contenuto di un file CSV. Vediamolo con un esempio
<?php
$filename = 'users.csv';
$handler = fopen($filename, 'r');
while($data = fgetcsv($handler)) {
$users[] = implode('', $data);
}
fclose($handler);
print_r($users);
/* Output
Array
(
[0] => Cristiano;Ronaldo;Portogallo
[1] => Gonzalo;Higuain;Argentina
[2] => Giorgio;Chiellini;Italia
)
*/
PHP consente di leggere anche una singola stringa CSV tramite la funzione str_getcsv()
<?php
$values = '10,89,100,34,15';
$csv = str_getcsv($values);
print_r($csv);
/* Output
Array
(
[0] => 10
[1] => 89
[2] => 100
[3] => 34
[4] => 15
)
*/
Nota: nell'esempio precedente avremmo ottenuto lo stesso risultato utilizzando la funzione di stringa explode() che restituisce un array contenente i pezzi della stringa esplosi tramite il carattere separatore.