Come leggere un file CSV in PHP

A chi si occupa di programmazione sicuramente sarà capitato di dover importare dati da un file CSV, per poterli elaborare o semplicemente trasferirli su un Data Base. Oggi vedremo come leggere facilmente un file CSV con PHP e come gestire il suo contenuto grazie a CsvFileLoader, una classe PHP che può essere importata facilmente con Composer.

Come già saprai, un file CSV (Comma Separated Values) è un semplice file di testo contente dati. La sua struttura cerca di imitare una tabella dove ogni riga corrisponde ad un record, e i valori dei campi sono separati, “di solito”, da una virgola.

Per esempio, supponiamo di avere una tabella contenente nome, cognome e data di nascita, il corrispondente file CSV avrà questa struttura:

nome, cognome, data di nascita
Mario, Rossi, 27/05/1980
Luca, Bianchi, 15/02/1987

Naturalmente, il separatore può essere sostituito da qualsiasi altro carattere, per esempio: “;”(punto e virgola).

Ora vediamo come importare il contenuto del file CSV e come usare CsvFileLoader.

Come leggere file CSV con PHP e CsvFileLoader

Per prima cosa, preoccupiamoci di importare la libraria contente la classe CsvFileLoader  con Composer, con il seguente comando:

$ composer require "luchaninov/csv-file-loader:1.*"

Dopo aver scaricato il package, scriviamo il codice PHP necessario per accedere al contenuto del file CSV.

Innanzi tutto, importiamo il nomespace con la parola chave use e le classi che ci servono inserendo in cima al file la riga require 'vendor/autoload.php'.

Supponiamo di voler leggere un file CSV con nome “prova.csv” situato nella sottocartella “import” e il cui contenuto è:

nome, cognome, data di nascita
id,name,surname
1,Jack,Black
2,John,Doe

Il codice PHP che devi scrivere per poter accedere al suo contenuto sarà:

use Luchaninov\CsvFileLoader\CsvFileLoader;
require 'vendor/autoload.php';

$file = "import/prova.csv";

$loader = new CsvFileLoader( $file);
foreach ($loader->getItems() as $item) {
    var_dump($item); // do something here
}

Il risultato di queste poche righe di codice sarà formato da due array associativi.  Di default, la prima riga viene usata per etichettare le colonne.

Ecco cosa visualizzerai a video se esegui il codice:


array(3) {
  ["id"]=>
  string(1) "1"
  ["name"]=>
  string(4) "Jack"
  ["surname"]=>
  string(5) "Black"
}
array(3) {
  ["id"]=>
  string(1) "2"
  ["name"]=>
  string(4) "John"
  ["surname"]=>
  string(3) "Doe"
}

Se il carattere che delimita i campi non è la virgola, ma un qualsiasi altro carattere, per esempio “punto e virgola”, con il metodo setDelimiter puoi indicare alla classe CsvFileLoader quale deve usare.

Se il nostro file CSV usa “;” per separare il valore dei campi, dobbiamo aggiungere la seguente riga:

$loader->setDelimiter(';')

Come usare la classe CsvFileLoader per leggere file CSV

La classe non ha molti metodi ed è abbastanza semplice.

Come ho già detto, si suppone che la prima riga contenga il nome delle colonne. Se non è così possiamo assegnare il nome alle colonne o usare dei numeri con il metodo setHeader.

Per impostare il nome da assegnare alle colonne dobbiamo scrivere:

$loader->setHeaders(['key1', 'key2', ...])

Mentre, se non vogliamo indicare alcun nome, ma vogliamo che gli venga assegnato un valore numerico [0, 1, 2, …], dobbiamo scrivere:

$loader->setHeaders(false)

Se la tabella è costituita da molte colonne, ed alcune non hanno etichetta, per evitare che il contenuto possa essere troncato, possiamo usare il metodo setAddUnknownColumns(true) che assegnerà un valore numerico alle colonne senza nome.

Per conoscere il numero record (o righe) è  sufficiente usare il metodo $loader->countItems();

Infine, se il file non è molto grosso e non contiene troppe righe, è possibile usare caricare tutto il suo contenuto in memoria in una matrice con il metodo getItemsArray().

Conclusioni

Come hai visto con poche righe di codice è possibile leggere ed elaborare il contenuto di qualsiasi file CSV  con PHP.

I file CSV, per la loro semplicità e leggerezza, sono molto diffusi e quasi tutti programmi di elaborazione di dati permettono l’esportazione anche in questo formato. Per un programmatore è importante saperli leggere ed elaborarne il contenuto.

La classe che ti ho mostrato è molto semplice e svolge le funzioni basilari. Naturalmente, poi dovrai essere tu ad elaborare i dati in base alle tue esigenze.

Se hai trovato utile questa guida, ti do appuntamento al prossimo articolo e ti aspetto nella nostra pagina Facebook per un like.

Altrimenti, continua sul BlogAmico puoi trovare articoli interessanti, tra cui Cos’è e come funziona un keylogger o consigli utili su come Recuperare file cancellati dal cestino.

Articoli correlati


Rocco Vincy

Analista/Programmatore e blogger, si occupa di sicurezza informatica e delle comunicazioni. Co-fondatore del sito/blog "BlogAmico"

Rocco Vincy ha 147 articoli e più. Guarda tutti gli articoli di Rocco Vincy

Rocco Vincy