Menu

מערכים ב-PHP: יצירה, גישה, לולאות והדפסה

מערך ב-PHP הוא רשימה מסודרת של ערכים, כל אחד שמור תחת מפתח: $fruits = ['apple', 'banana']; נקרא כ-$fruits[0]. למדו איך יוצרים מערכים, קוראים ומשנים איברים, עוברים עליהם בלולאה, מדפיסים אותם, ובאיזו פונקציית מערך להשתמש.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

מערך ב-PHP שומר רשימת ערכים תחת מפתחות. יוצרים אותו עם סוגריים מרובעים, $fruits = ['apple', 'banana', 'cherry'];, וקוראים איבר לפי האינדקס שלו, $fruits[0]. האינדקסים מתחילים ב-0, ו-count($fruits) נותנת את מספר האיברים.

כל מערך ב-PHP הוא מפה מסודרת: כל ערך יושב תחת מפתח. כשלא בוחרים את המפתחות, PHP ממספרת אותם 0, 1, 2... ומקבלים מערך עם אינדקסים. כשבוחרים אותם בעצמכם (['name' => 'Ada']), מקבלים מערך אסוציאטיבי. שניהם אותו טיפוס array.

יצירת מערך

סוגריים מרובעים הם התחביר הרגיל. array() הוא הכתיב הישן ומפיק בדיוק את אותו הדבר. range() בונה רשימה של מספרים או אותיות, ו-array_fill() חוזרת על ערך אחד.

מערך ב-PHP יכול להחזיק ערכים מטיפוסים שונים בבת אחת, כולל מערכים אחרים. מערך של מערכים הוא מערך רב ממדי, הדרך הרגילה להחזיק שורות של נתונים.

קבלת האיבר הראשון והאחרון

אין ב-PHP אינדקסים שליליים. $arr[-1] לא אומר "האחרון": הוא מחפש מפתח בשם -1, וכשאין כזה, PHP מדפיסה Warning: Undefined array key -1. השתמשו ב-array_key_first() וב-array_key_last(), שעובדות גם כשהמפתחות לא מתחילים ב-0.

גם end($queue) מחזירה את הערך האחרון, אבל היא מזיזה את המצביע הפנימי של המערך כתופעת לוואי, ולכן הגרסה שמבוססת על מפתחות היא הבחירה הברורה יותר.

הדפסת מערך

echo $arr לא עובד: הוא מדפיס את המילה Array ואזהרה. בחרו את הפלט שמתאים לעבודה:

  • print_r($arr) לפלט קריא בזמן דיבאג.
  • var_dump($arr) כדי לראות גם את הטיפוס והאורך של כל ערך.
  • implode(', ', $arr) כדי להפוך את הערכים למחרוזת אחת לתצוגה.
  • json_encode($arr) כדי לשלוח את המערך ל-JavaScript או ל-API.

עמוד print_r ו-var_dump מכסה את אפשרויות העיצוב, כולל הדפסת מערך בתוך HTML.

מעבר על מערך בלולאה

foreach היא הלולאה שנבנתה למערכים: היא נותנת לכם כל ערך, וגם את המפתח אם מבקשים. לולאת for עם אינדקס עובדת גם היא למערכים עם אינדקסים שהמפתחות שלהם רצים מ-0 בלי פערים.

מערכים מועתקים, לא משותפים

הצבה של מערך למשתנה אחר, או העברה שלו לפונקציה, נותנת עותק. שינוי העותק משאיר את המקור כמו שהוא. הוסיפו & לפרמטר כשפונקציה צריכה לשנות את המערך של הקורא.

פונקציות מערך לפי משימה

PHP מגיעה עם יותר מ-70 פונקציות מערך. אלה הפונקציות שתשתמשו בהן הכי הרבה, ולכל אחת יש עמוד משלה:

משימהפונקציה
הוספה לסוףarray_push() או $arr[] =
מספר האיבריםcount()
בדיקה אם ערך קייםin_array()
מציאת המפתח של ערךarray_search()
בדיקה אם מפתח קייםarray_key_exists()
חיבור מערכיםarray_merge()
שינוי כל ערךarray_map()
שמירה של חלק מהערכיםarray_filter()
מיוןsort(), usort() והחברים שלהן
הסרת איברunset(), array_splice()
לקיחת חלקarray_slice()
הסרת כפילויותarray_unique()
ממחרוזת למערך ובחזרהexplode(), implode()

מפתחות שמתמזגים בשקט

מפתחות מערך הם מספרים שלמים או מחרוזות, ו-PHP ממירה חלק מהמפתחות בשבילכם. מחרוזת שנראית כמו מספר עשרוני שלם, כמו "1", הופכת למספר השלם 1, ולכן $a["1"] ו-$a[1] הם אותו מקום. "01" ו-"1.5" נשארים מחרוזות. זו הסיבה שמערך שנבנה מקלט של טופס או מ-CSV יכול להגיע עם פחות איברים ממה שציפיתם.

שאלות נפוצות

איך יוצרים מערך ב-PHP?

השתמשו בסוגריים מרובעים: $colors = ['red', 'green', 'blue'];. מערך ריק הוא $items = [];. התחביר הישן array('red', 'green') עושה את אותו הדבר ועדיין עובד.

איך מדפיסים מערך ב-PHP?

echo לא יכולה להדפיס מערך (היא מדפיסה את המילה Array ואזהרה). השתמשו ב-print_r($arr) לפלט קריא, ב-var_dump($arr) כדי לראות גם טיפוסים, או ב-echo implode(', ', $arr) כדי להדפיס את הערכים בשורה אחת.

איך מקבלים את האיבר האחרון של מערך ב-PHP?

השתמשו ב-$arr[array_key_last($arr)] (PHP 7.3 ומעלה) או ב-end($arr). אין ב-PHP אינדקסים שליליים: $arr[-1] מחפש מפתח בשם -1, שבדרך כלל לא קיים.

האם מערכים ב-PHP מועברים לפי ערך או לפי הפניה?

לפי ערך. $b = $a; נותן ל-$b עותק משלו, ולכן שינוי של $b לא משנה את $a. כדי לשנות את המערך של הקורא בתוך פונקציה, הגדירו את הפרמטר כהפניה: function add(array &$list).

מה ההבדל בין מערך עם אינדקסים למערך אסוציאטיבי ב-PHP?

זה אותו טיפוס. למערך עם אינדקסים יש מפתחות שלמים 0, 1, 2... ש-PHP מקצה בשבילכם; מערך אסוציאטיבי משתמש במפתחות שאתם בוחרים, בדרך כלל מחרוזות כמו 'name'. מערך אחד יכול אפילו לערבב את שניהם.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל