فرمت CSV یکی از پرطرفدارترین ساختارها برای نگهداری یا انتقال داده در کامپیوتر است. در این آموزش ۲ روش اصلی کار با CSV در PHP را یاد میگیریم تا بتوانیم محتوای csv را خوانده یا یک فایل جدید با دادههای خودمان ایجاد کنیم.
در کار با CSV معمولاً دو عملیات اصلی انجام میدهیم:
فهرست محتوای آموزش
برای خواندن و نوشتن CSV با PHP از توابع درونی این زبان استفاده میکنیم تا به راحتی به هدفمان برسیم.
در فرمت CSV از علامتها برای جداسازی دادهها استفاده میشود. عمومیترین حالت آن این است که هر سطر داده در یک خط و دادههای هر سطر با علامت کاما (,
) جدا شوند. اما بنا به نیازمان ممکن است از کاراکتر دیگری برای جداسازی استفاده کرده باشیم.
برای روند بهتر در آموزش، فرض کنید یک فایل CSV ساده با ساختار و محتوای زیر به نام employee.csv
در کنار کدهای PHP خود داریم:
در ادامه ابتدا نحوه خواندن و نگهداری اطلاعات csv را بررسی کرده و سپس روش ایجاد آن را در PHP میآموزیم.
تابع fgetcsv()
برای خواندن هر رکورد از CSV در PHP استفاده میشود. خروجی این تابع یک آرایه PHP است.
fgetcsv( $stream, $length, $separator, $enclosure, $escape);
آرگومان اول این تابع اجباری و سایر ورودیها اختیاری هستند. این ورودیها عبارتاند از:
$length
کاراکتر حرکت میکند. مثلاً در هر بار خواندن، فقط 15 کاراکتر را میگیرد. حالا اگر جداکنندهای داشته باشد، یک آرایه چند عضوی و در غیر اینصورت یک آرایه تک عضوی خواهیم داشت.,
است.)"
)
)در ابتدا باید فایل را با تابع 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 را برمیگرداند.
قطعه کد زیر مثالی ساده از نمایش دادههایمان درون یک لیست است:
<?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()
باز کرده بودیم ببنیدم.
در هر بار اجرای حلقه while یک سطر از دادهها در متغیر $employee
ریخته میشود. در بدنه به اندیسهای موردنظرمان دسترسی پیدا کرده و آنها را چاپ کردهایم. وقتی به انتها برسیم، مقدار متغیر false شده و حلقه اجرا نخواهد شد. (اگر با حلقهها آشنا نیستید، جلسه حلقه در PHP را ببینید.)
اگر بخواهیم همه یا بخشی از سطرها را درون یک آرایه چند بعدی قرار دهیم، میتوانیم مشابه قطعه کد زیر عمل کنیم:
<?php
$f = fopen('employee.csv', 'r');
fgetcsv($f); // Remove First Row
$data = [];
while( $row = fgetcsv($f) ){ $data[] = $row
}
fclose($f);
برای ایجاد csv با PHP از تابع fputcsv()
استفاده میکنیم. مشابه تابع قبلی، این تابع اشارهگر به فایل مورد نظر را گرفته و دادههایمان را در فرمت csv مینویسد.
fputcsv( $stream, $fields, $separator, $enclosure, $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 بازدید : 302