PHP:
עובדים עם CSV

איך לעשות:

PHP מספק פונקציות מובנות לטיפול בקבצי CSV, מה שהופך את הקריאה מהם והכתיבה אליהם לפשוטה ללא צורך בספריות של צד שלישי. הנה דוגמאות להתחלה:

קריאה מקובץ CSV

ניתן לפתוח קובץ CSV ולקרוא את תכניו באמצעות fopen() בשילוב עם fgetcsv():

<?php
$filename = 'data.csv';
$handle = fopen($filename, "r");
if ($handle !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "מספר השדות בשורה: $num\n";
        for ($c = 0; $c < $num; $c++) {
            echo $data[$c] . "\n";
        }
    }
    fclose($handle);
}
?>

הסקריפט הזה מדפיס את מספר השדות בכל שורה בעקבות תוכן כל שדה.

כתיבה לקובץ CSV

כדי לכתוב לקובץ CSV, השתמש ב-fopen() במצב כתיבה (w) וב-fputcsv():

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

הסקריפט הזה יוצר קובץ בשם users.csv וכותב אליו את הכותרת ושתי שורות נתונים.

שימוש בספרייה: League\Csv

לטיפול מתקדם יותר ב-CSV, הספרייה League\Csv מציעה סט רחב של יכולות. לאחר התקנתה באמצעות Composer (composer require league/csv), ניתן להשתמש בה לקריאה וכתיבה של נתוני CSV בצורה גמישה יותר.

קריאה עם League\Csv

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

use League\Csv\Reader;

$csv = Reader::createFromPath('data.csv', 'r');
$csv->setHeaderOffset(0); // קבע אם אתה רוצה להשתמש בשורה הראשונה ככותרת

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

הסקריפט הזה קורא את data.csv, מתייחס לשורה הראשונה כאל כותרות עמודות ומדפיס כל שורה כמערך אסוציאטיבי.

כתיבה עם League\Csv

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

use League\Csv\Writer;

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

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

echo "נכתב בהצלחה אל users_new.csv.";
?>

זה יוצר את users_new.csv וכותב שורת כותרת אחריה שתי שורות נתונים.