کار با csv در PHP : آموزش خواندن و ایجاد فایل csv عملی

ساخت وبلاگ
<a href='/last-search/?q=آموزش'>آموزش</a> <a href='/last-search/?q=کار'>کار</a> با CSV در PHP با مثال

فرمت CSV یکی از پرطرفدارترین ساختارها برای نگهداری یا انتقال داده در کامپیوتر است. در این آموزش ۲ روش اصلی کار با CSV در PHP را یاد می‌گیریم تا بتوانیم محتوای csv را خوانده یا یک فایل جدید با داده‌های خودمان ایجاد کنیم.

در کار با CSV معمولاً دو عملیات اصلی انجام می‌دهیم:

  • خواندن اطلاعات از csv و نمایش یا نگه‌داری آن‌ها در یک متغیر PHP (آرایه‌ای)
  • ایجاد یک csv برای ذخیره‌سازی اطلاعات (مثلاً برای خروجی دادن یک گزارش از سایت)

فهرست محتوای آموزش

کار با CSV در PHP

برای خواندن و نوشتن CSV با PHP از توابع درونی این زبان استفاده می‌کنیم تا به راحتی به هدفمان برسیم.

در فرمت CSV از علامت‌ها برای جداسازی داده‌ها استفاده می‌شود. عمومی‌ترین حالت آن این است که هر سطر داده در یک خط و داده‌های هر سطر با علامت کاما (,) جدا شوند. اما بنا به نیازمان ممکن است از کاراکتر دیگری برای جداسازی استفاده کرده باشیم.

برای روند بهتر در آموزش، فرض کنید یک فایل CSV ساده با ساختار و محتوای زیر به نام employee.csv در کنار کدهای PHP خود داریم:

نمونه محتوای فایل CSV
نمونه محتوای فایل CSV

در ادامه ابتدا نحوه خواندن و نگهداری اطلاعات csv را بررسی کرده و سپس روش ایجاد آن را در PHP می‌آموزیم.

خواندن CSV با PHP

تابع fgetcsv() برای خواندن هر رکورد از CSV در PHP استفاده می‌شود. خروجی این تابع یک آرایه PHP است.

fgetcsv( $stream, $length, $separator, $enclosure, $escape);

آرگومان اول این تابع اجباری و سایر ورودی‌ها اختیاری هستند. این ورودی‌ها عبارت‌اند از:

  1. stream : اشاره‌گری به فایل که باز شده است. (از نوع داده‌ای resource)
  2. length : به جای خواندن سطر به سطر، به تعداد $length کاراکتر حرکت می‌کند. مثلاً در هر بار خواندن، فقط 15 کاراکتر را می‌گیرد. حالا اگر جداکننده‌ای داشته باشد، یک آرایه چند عضوی و در غیر اینصورت یک آرایه تک عضوی خواهیم داشت.
  3. separator : کاراکتر جداکننده (پیشفرض , است.)
  4. enclosure : علامت مشخص‌کننده هر سلول داده. مثلاً اگر مقدار هر سلول بین دو علامت ^ قرار گرفته‌اند، در اینجا مشخص می‌کنیم. (پیشفرض ")
  5. escape : اسکیپ کاراکترها (کاراکتر نادیده‌گیرنده؛ پیشفرض )

در ابتدا باید فایل را با تابع fopen() باز کنیم. در مورد این تابع و روش‌های خواندن فایل در آموزش خواندن فایل با PHP به‌طور مفصل صحبت کرده‌ام. ورودی اول، آدرس و نام فایل و ورودی دوم mode باز کردن را مشخص می‌کند:

$f = fopen('employee.csv', 'r');

حالا اگر متغیر فایل را به fgetcsv() بدهیم، آرایه‌ای از داده‌های سطر اول csv خود را در خروجی خواهیم داشت:

<?php
$f = fopen('employee.csv', 'r');
$row = fgetcsv($f);
print_r($row);

در هر بار فراخوانی این تابع روی فایل، یک سطر از csv در php خوانده می‌شود. شئ فایل ($f) حاوی یک اشاره‌گر است تا PHP متوجه شود تا کجای یک فایل را خوانده است. (اصطلاحاً pointer) وقتی به انتهای فایل می‌رسیم، تابع fgetcsv() مقدار false را برمی‌گرداند.

مثال کار با محتوای csv

قطعه کد زیر مثالی ساده از نمایش داده‌هایمان درون یک لیست است:

<?php
// Read data from CSV in PHP
$f = fopen('employee.csv', 'r');
fgetcsv($f); // Remove First Row
echo "<ul>";
while( $employee = fgetcsv($f) ){ echo "<li>{$employee[1]} ({$employee[3]})</li>";
}
echo "</ul>";
fclose($f);

همیشه خوب است در انتهای کارمان فایلی را که با fopen() باز کرده بودیم ببنیدم.

خواندن csv با تابع fgetcsv در پی اچ پی
نمونه خروجی خواندن csv با fgetcsv در حلقه

در هر بار اجرای حلقه while یک سطر از داده‌ها در متغیر $employee ریخته می‌شود. در بدنه به اندیس‌های موردنظرمان دسترسی پیدا کرده و آن‌ها را چاپ کرده‌ایم. وقتی به انتها برسیم، مقدار متغیر false شده و حلقه اجرا نخواهد شد. (اگر با حلقه‌ها آشنا نیستید، جلسه حلقه در PHP را ببینید.)

تبدیل csv به آرایه

اگر بخواهیم همه یا بخشی از سطرها را درون یک آرایه چند بعدی قرار دهیم، می‌توانیم مشابه قطعه کد زیر عمل کنیم:

<?php
$f = fopen('employee.csv', 'r');
fgetcsv($f); // Remove First Row
$data = [];
while( $row = fgetcsv($f) ){ $data[] = $row
}
fclose($f);

ساخت و نوشتن CSV در PHP

برای ایجاد csv با PHP از تابع fputcsv() استفاده می‌کنیم. مشابه تابع قبلی، این تابع اشاره‌گر به فایل مورد نظر را گرفته و داده‌هایمان را در فرمت csv می‌نویسد.

fputcsv( $stream, $fields, $separator, $enclosure, $escape );

این تابع ۵ آرگومان ورودی دارد که دو تای اول ضروری و بقیه اختیاری هستند:

  1. stream : اشاره‌گر به فایل
  2. fields : آرایه‌ای از داده‌ها (معمولاً رشته PHP هستند.)
  3. separator : جداکننده فیلدها از هم
  4. enclosure : علامت نگه‌دارنده هر فیلد
  5. escape : اسکیپ کاراکتر

خروجی fputcsv() در صورت موفقیت‌آمیز بودن عملیات نوشتن، یک عدد (تعداد کاراکترهای نوشته‌شده) و در صورت مشکل‌دار بودن false خواهد بود.

در قطعه کد زیر سه مجموعه داده آزمایشی را در فایلی به نام new.csv می‌نویسم:

<?php
// Write data into CSV with PHP
$data = [ ['omid', '35741', 'Pending'], ['Mohsen', '77394', 'Complete'], ['Ghazal', '14557', 'Complete'],
];
$f = fopen('new.csv', 'w'); // Open File in Write Mode
foreach( $data as $row ){ fputcsv( $f, $row );
}
fclose($f);

دقت کنید که اینجا برای باز کردن فایل csv در php از مد w برای نوشتن استفاده کرده‌ام.

می‌توانیم کدهایی که تا اینجا نوشتیم را کمی حرفه‌ای‌تر کنیم! مثلاً اگر مشکلی در باز کردن فایل داشتیم، برنامه را متوقف کنیم؛ چیزی شبیه قطعه کد زیر: (بیشتر بدانید: ساختار شرط در PHP)

<?php
$data = [ ['omid', '35741', 'Pending'], ['Mohsen', '77394', 'Complete'], ['Ghazal', '14557', 'Complete'],
];
$f = fopen('new.csv', 'w');
if($f === false){	die('File Openning Failed!');
}
foreach( $data as $row ){ echo fputcsv( $f, $row );	echo '<br>';
}
fclose($f);
// output:
// 19
// 22
// 22

اینجا خروجی تابع را echo کرده‌ام تا ببینیم برای هر سطر چه نتیجه‌ای داریم. در خط اول 19 کاراکتر و در دوتای بعدی 22 کاراکتر در فایل نوشته شده است.

شاید بگویید خودمان می‌توانیم مستقیماً با فایل کار کنیم؛ شبیه کار با فایل در PHP. برای خواندن باید داده‌های هر خط را با علامت جداکننده جدا کنیم؛ همچنین موقع نوشتن بین داده‌های هر سطر کاراکتر مورد نظرمان را قرار دهیم. بله می‌شود؛ اما چرا از راه ساده‌تر استفاده نکنیم؟! سون لرن • آموزش...

ما را در سایت سون لرن • آموزش دنبال می کنید

برچسب : نویسنده : استخدام کار 7learn بازدید : 297 تاريخ : جمعه 30 ارديبهشت 1401 ساعت: 22:39

خبرنامه