כיצד לטפל בקובץ csv באמצעות php?
במדריך קודם למדנו כיצד להעלות קבצים לשרת , ובמדריך זה נסביר כיצד PHP יכול לטפל בקבצי CSV. אם תדעו כיצד לטפל בקבצי CSV תוכלו, לדוגמה, להעלות קבצי excel שלמים למסד הנתונים, ולהשתמש בהם בדרכים הרבות והשונות שמאפשר PHP.
במדריך זה נלמד:
- להסב קבצי Excel לקבציי CSV
- לטפל בקבצי CSV באמצעות PHP
מבוסס על מדריך שפרסמתי באתר phpenthusiast.com, Parse CSV files with PHP
הסבת קבצי Excel לקבציי CSV
לצורך הדוגמה, נתחיל מקובץ excel רגיל שכולל את שמם של ראשי הרשויות בישראל במספר ערים נבחרות. הקובץ כולל את שמו של האזור (צפון, מרכז, דרום), את שם הרשות (חיפה, תל אביב, ירושלים) ואת שם ראש הראשות (יונה יהב, רון חולדאי, ניר ברקת וכיו"ב).
כך נראה קובץ האקסל המקורי:
כדי להסב את המסמך ל-CSV, נשמור את הקובץ בשם:
ונבחר בסוג CSV(Comma delimited):
התוצאה היא קובץ CSV, כשהשדות בכל שורה מופרדים עכשיו בפסיקים. כך זה נראה בעורך טקסט דוגמת notepad++:
נתקלתם בבעיה ואין לכם גישה לאקסל? לא נורא. אפשר להעלות את הקובץ ל-Google Drive ואז להוריד אותו כקובץ csv:
שימו לב שאם הקובץ בעברית מוטב לשמור אותו בקידוד UTF-8, כדי שלא יתחרבש בעיבוד בהמשך.
אתם מוזמנים להוריד את קובץ ה-csv הבא כדי שישמש אתכם בהמשך המדריך.
טיפול בקבצי CSV באמצעות PHP
הפונקציה שמטפלת בקובץ ה-csv, היא fgetcsv, שזה התחביר שלה:
fgetcsv("file_name", 1000, "," );
- file_name – הוא שם הקובץ. לדוגמה, regions.csv
- 1000 – מספר התווים בשורה הארוכה ביותר (לא הכרחי)
- "," – התו המפריד בין הפריטים (לא הכרחי)
כדי להשתמש ב-fgetcsv ביעילות צריך לשלב קוד שלמדנו שפותח את הקובץ בתחילת הקוד באמצעות fopen, וסוגר את הקובץ בסוף הקוד באמצעות fclose. כשבין לבין, רצה לולאה שהופכת כל שורה בנפרד למערך.
זה הקוד:
פתיחת הקובץ לקריאה באמצעות fopen(), כמו שראינו במדריך טיפול בקבצים.
$handle = fopen("filename.csv", "r");
קריאת שורה-שורה מהקובץ באמצעות fgetcsv(), והפיכת כל שורה בנפרד למערך ($data).
fgetcsv($handle, 1000, ",");
כולל את ה-$handle, שיצרנו בסעיף קודם, 1000 מייצג את מספר התווים המקסימלי בכל שדה בנפרד, ו-"," מציין שהשדות מופרדים בפסיקים.
כדי שהקריאה תתבצע מכל השורות, צריך להריץ בתוך לולאה.
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
// Do something.
}
סגירת הקובץ הפתוח.
fclose($handle);
בואו נשלב את שלושת השלבים, לקוד מלא:
<?php
// פתיחת הקובץ
if (($handle = fopen("mayors.csv", "r")) !== FALSE) {
// הפיכת כל שורה בנפרד למערך, כשהפריטים מופרדים בפסיק
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
// Do something.
}
// סגירת הקובץ
fclose($handle);
}
הפיכת קובץ ה-CSV למערך מקונן
מטרת הקוד הבא לייצר מערך מקונן ($the_big_array), שהמערכים שמקוננים בתוכו עשויים כל אחד מאחת השורות בקובץ ה-CSV.
<?php
// שם הקובץ
$filename = 'mayors.csv';
// המערך שכולל את כל המערכים
$the_big_array = array();
// פותח את הקובץ וקורא את תכולתו
if (($handle = fopen("{$filename}", "r")) !== FALSE) {
//כל שורה בקובץ הופכת למערך $data
// פריטי המערך מופרדים בפסיק
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
// כל מערך בנפרד נוסף למערך הגדול
$the_big_array[] = $data;
}
// סוגרים את הקובץ
fclose($handle);
}
// כותבים את המערך למסך
echo "<pre>";
print_r($the_big_array);
echo "</pre>";
וכך נראה המערך שיצרנו מקובץ ה-CSV:
Array
(
[0] => Array
(
[0] => איזור
[1] => שם היישוב
[2] => ראש היישוב
)
[1] => Array
(
[0] => מרכז
[1] => תל אביב
[2] => רון חולדאי
)
[2] => Array
(
[0] => מרכז
[1] => בת ים
[2] => שלמה לחיאני
)
[3] => Array
(
[0] => מרכז
[1] => חולון
[2] => מוטי ששון
)
[4] => Array
(
[0] => ירושלים
[1] => ירושלים
[2] => ניר ברקת
)
[5] => Array
(
[0] => צפון
[1] => חיפה
[2] => יונה יהב
)
[6] => Array
(
[0] => דרום
[1] => באר שבע
[2] => ראובן דנילוביץ
)
)
אהבתם? לא אהבתם? דרגו!
0 הצבעות, ממוצע 0 מתוך 5 כוכבים
המדריכים באתר עוסקים בנושאי תכנות ופיתוח אישי. הקוד שמוצג משמש להדגמה ולצרכי לימוד. התוכן והקוד המוצגים באתר נבדקו בקפידה ונמצאו תקינים. אבל ייתכן ששימוש במערכות שונות, דוגמת דפדפן או מערכת הפעלה שונה ולאור השינויים הטכנולוגיים התכופים בעולם שבו אנו חיים יגרום לתוצאות שונות מהמצופה. בכל מקרה, אין בעל האתר נושא באחריות לכל שיבוש או שימוש לא אחראי בתכנים הלימודיים באתר.
למרות האמור לעיל, ומתוך רצון טוב, אם נתקלת בקשיים ביישום הקוד באתר מפאת מה שנראה לך כשגיאה או כחוסר עקביות נא להשאיר תגובה עם פירוט הבעיה באזור התגובות בתחתית המדריכים. זה יכול לעזור למשתמשים אחרים שנתקלו באותה בעיה ואם אני רואה שהבעיה עקרונית אני עשוי לערוך התאמה במדריך או להסיר אותו כדי להימנע מהטעיית הציבור.
שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.
המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?
השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.