العمل مع CSV في PHP: قراءة وكتابة ومعالجة البيانات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع CSV في PHP: دليل شامل



CSV (Comma-Separated Values) هو أحد أكثر التنسيقات شيوعًا لتبادل البيانات الجدولية. في PHP، توجد دوال مدمجة للعمل مع CSV بالإضافة إلى مكتبات خارجية قوية. في هذه المقالة، سنستعرض جميع الطرق الأساسية لقراءة وكتابة ومعالجة ملفات CSV في PHP.



الدوال المدمجة في PHP للعمل مع CSV



يوفر PHP العديد من الدوال المدمجة التي تسمح بالعمل مع ملفات CSV دون الحاجة إلى تثبيت مكتبات إضافية. أهمها:



  • fgetcsv() — قراءة سطر من ملف وتحليله إلى مصفوفة
  • fputcsv() — كتابة مصفوفة إلى ملف بتنسيق CSV
  • str_getcsv() — تحليل سلسلة CSV إلى مصفوفة


قراءة ملف CSV باستخدام fgetcsv



الدالة fgetcsv() تقرأ سطرًا واحدًا من ملف مفتوح وتعيده كمصفوفة. مثال لقراءة ملف كامل:



<?php$filename = 'data.csv';

if (($handle = fopen($filename, 'r')) !== false) { while (($data = fgetcsv($handle, 1000, ',')) !== false) { // $data — مصفوفة تحتوي على بيانات السطر echo implode(' | ', $data) . ""; } fclose($handle);}?>


معاملات الدالة fgetcsv():

  • handle — مؤشر الملف
  • length — أقصى طول للسطر (عادة 0 أو 1000)
  • separator — فاصل الحقول (افتراضيًا الفاصلة)
  • enclosure — رمز تغليف الحقول (افتراضيًا علامة الاقتباس المزدوجة)
  • escape — رمز الهروب (افتراضيًا الخط المائل العكسي)


كتابة البيانات إلى ملف CSV



للكتابة، تُستخدم الدالة fputcsv(). تأخذ مصفوفة وتحولها إلى سلسلة CSV:



<?php$data = [    ['الاسم', 'العمر', 'المدينة'],    ['أحمد', 25, 'القاهرة'],    ['مريم', 30, 'الرياض'],];

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

foreach ($data as $row) { fputcsv($handle, $row, ';', '"');}

fclose($handle);echo "تم إنشاء الملف $filename بنجاح!";?>


في هذا المثال، نستخدم الفاصلة المنقوطة (;) كفاصل، وهو شائع في ملفات CSV العربية.



معالجة ملفات CSV الكبيرة



عند العمل مع ملفات كبيرة (مئات الآلاف من الأسطر)، من المهم عدم تحميل الملف بأكمله في الذاكرة. استخدم القراءة سطرًا بسطر:



<?phpfunction processLargeCSV($filename) {    $handle = fopen($filename, 'r');        // تخطي الرأس إن وجد    $header = fgetcsv($handle);        while (($row = fgetcsv($handle)) !== false) {        // معالجة كل سطر        $processed = array_map('trim', $row);        // هنا يمكن وضع منطق المعالجة الخاص بك        yield $processed; // استخدام المولد    }        fclose($handle);}

// الاستخدامforeach (processLargeCSV('bigdata.csv') as $row) { // العمل مع كل سطر على حدة echo "تمت معالجة السطر: " . implode(',', $row) . "";}?>


استخدام المولدات (yield) يسمح بمعالجة ملفات بأي حجم دون تجاوز الذاكرة.



مكتبة League\\Csv للعمل المتقدم



للمهام الأكثر تعقيدًا، يُوصى باستخدام مكتبة league/csv. توفر واجهة كائنية التوجه مريحة والعديد من الإمكانيات الإضافية.



التثبيت عبر Composer:

composer require league/csv


مثال على الاستخدام:



<?phprequire 'vendor/autoload.php';

use League\\Csv\\Reader;use League\\Csv\\Writer;

// قراءة CSV$csv = Reader::createFromPath('data.csv', 'r');$csv->setHeaderOffset(0); // السطر الأول هو الرأس

// الحصول على جميع السجلات كمصفوفات ترابطية

توصيات