PHP:
Lavorare con i CSV

Come fare:

PHP fornisce funzioni integrate per gestire file CSV, rendendo semplice leggere da e scrivere su questi file senza la necessità di librerie di terze parti. Ecco alcuni esempi per iniziare:

Leggere un File CSV

Puoi aprire un file CSV e leggerne il contenuto usando fopen() in combinazione con fgetcsv():

<?php
$filename = 'data.csv';
$handle = fopen($filename, "r");
if ($handle !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "Numero di campi nella riga: $num\n";
        for ($c = 0; $c < $num; $c++) {
            echo $data[$c] . "\n";
        }
    }
    fclose($handle);
}
?>

Questo script stampa il numero di campi di ogni riga seguito dal contenuto di ogni campo.

Scrivere su un File CSV

Per scrivere su un file CSV, usa fopen() in modalità scrittura (w) e fputcsv():

<?php
$list = [
    ['ID', 'Nome', 'Email'],
    [1, 'John Doe', '[email protected]'],
    [2, 'Jane Doe', '[email protected]']
];

$handle = fopen('users.csv', 'w');

foreach ($list as $row) {
    fputcsv($handle, $row);
}

fclose($handle);
?>

Questo script crea un file chiamato users.csv e scrive l’intestazione e due righe di dati su di esso.

Uso di una Libreria: League\Csv

Per una gestione CSV più avanzata, la libreria League\Csv offre un robusto insieme di funzionalità. Dopo averla installata tramite Composer (composer require league/csv), puoi usarla per leggere e scrivere dati CSV con maggiore flessibilità.

Leggere con League\Csv

<?php
require 'vendor/autoload.php';

use League\Csv\Reader;

$csv = Reader::createFromPath('data.csv', 'r');
$csv->setHeaderOffset(0); // Imposta se vuoi usare la prima riga come intestazione

$resultati = $csv->getRecords();
foreach ($resultati as $row) {
    print_r($row);
}
?>

Questo script legge data.csv, trattando la prima riga come intestazioni di colonna e stampa ogni riga come un array associativo.

Scrivere con League\Csv

<?php
require 'vendor/autoload.php';

use League\Csv\Writer;

$csv = Writer::createFromPath('users_new.csv', 'w+');

$csv->insertOne(['ID', 'Nome', 'Email']);
$csv->insertAll([
    [3, 'Alex Doe', '[email protected]'],
    [4, 'Anna Smith', '[email protected]']
]);

echo "Scritto su users_new.csv con successo.";
?>

Questo crea users_new.csv e scrive una riga di intestazione seguita da due righe di dati.