انتقل إلى محتوى الدرس

Reading CSV Rows with fgetcsv قراءة صفوف CSV عبر fgetcsv

اقرأ وصدّر جداول CSV عبر fgetcsv وfputcsv، وأدر المجلدات والمسارات بأمان باستخدام scandir وglob وpathinfo في PHP 8.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

على عكس الدالة البسيطة explode(",", $line)، تحلل الدالة fgetcsv() الحقول المحاطة بعلامات تنصيص بدقة حتى لو احتوت بداخلها على فواصل أو علامات تنصيص مزدوجة.

  • في PHP 8.4+ مرّر دائماً نصاً فارغاً للمعامل escape: "" (أو المعامل الخامس "") لتعطيل الهروب القديم بالشرطة العكسية وتجنب تنبيهات الإلغاء.
  • اقرأ الصف الأول قبل الحلقة إذا كان ملف CSV يبدأ بسطر أسماء الأعمدة، ثم اربطه بكل صف بيانات عبر array_combine().
  • تُرجع fgetcsv() مصفوفة مفهرسة بحقول كل صف، وتُرجع false عند وصول المؤشر إلى نهاية الملف.

تمرير "" كمعامل خامس يتوافق مع معيار RFC 4180 في PHP 8.4 ويحافظ على الفاصلة الموجودة داخل الحقل "Jeddah, SA".

مخطط توضيحي: محاكي معالجة ملفات CSV وإدارة المجلدات والمسارات في PHP 8.4
PHP
<?php
$fp = fopen('php://memory', 'r+');
fwrite($fp, "id,name,city\n10,\"Noura\",\"Jeddah, SA\"\n");
rewind($fp);
$cols = fgetcsv($fp, 0, ',', '"', '');
$row = fgetcsv($fp, 0, ',', '"', '');
$record = array_combine($cols, $row);
echo $record['name'] . " -> " . $record['city'] . "\n";
fclose($fp);