PHP:
Praca z plikami CSV

Jak to zrobić:

PHP oferuje wbudowane funkcje do obsługi plików CSV, co sprawia, że odczyt z nich i zapis do nich jest prosty bez potrzeby używania bibliotek stron trzecich. Oto przykłady, które pomogą Ci zacząć:

Odczytywanie pliku CSV

Możesz otworzyć plik CSV i odczytać jego zawartość za pomocą fopen() w połączeniu z fgetcsv():

<?php
$filename = 'data.csv';
$handle = fopen($filename, "r");
if ($handle !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "Liczba pól w linii: $num\n";
        for ($c = 0; $c < $num; $c++) {
            echo $data[$c] . "\n";
        }
    }
    fclose($handle);
}
?>

Ten skrypt wypisuje liczbę pól każdej linii, a następnie zawartość każdego pola.

Zapisywanie do pliku CSV

Aby zapisać do pliku CSV, użyj fopen() w trybie zapisu (w) i fputcsv():

<?php
$list = [
    ['ID', 'Nazwa', '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);
?>

Ten skrypt tworzy plik o nazwie users.csv i zapisuje do niego nagłówek i dwie linie danych.

Użycie biblioteki: League\Csv

Dla bardziej zaawansowanej obsługi CSV, biblioteka League\Csv oferuje solidny zestaw funkcji. Po jej instalacji poprzez Composer (composer require league/csv), możesz jej użyć do bardziej elastycznego czytania i zapisywania danych CSV.

Odczytywanie za pomocą League\Csv

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

use League\Csv\Reader;

$csv = Reader::createFromPath('data.csv', 'r');
$csv->setHeaderOffset(0); // Ustaw, jeśli chcesz używać pierwszego wiersza jako nagłówek

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

Ten skrypt czyta data.csv, traktując pierwszy wiersz jako nagłówki kolumn i wypisuje każdy wiersz jako asocjacyjną tablicę.

Zapisywanie za pomocą League\Csv

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

use League\Csv\Writer;

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

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

echo "Zapisano do users_new.csv pomyślnie.";
?>

To tworzy users_new.csv i zapisuje wiersz nagłówkowy, a następnie dwa wiersze danych.