Menu

מערכים רב ממדיים ב-PHP: מערכים מקוננים ולולאות

מערך רב ממדי ב-PHP הוא מערך שהאיברים שלו הם מערכים, וקוראים אותו עם זוג סוגריים לכל רמה: $grid[1][2] או $users[0]['name']. למדו איך יוצרים מערכים מקוננים, קוראים ומשנים ערכים עמוקים, עוברים עם foreach מקונן, בונים טבלת HTML, שולפים עמודה וממיינים שורות.

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

מערך רב ממדי הוא מערך שהאיברים שלו הם מערכים. קוראים אותו עם זוג סוגריים לכל רמה: $grid[1][2] הוא שורה 1, עמודה 2, ו-$users[0]['name'] הוא השם ברשומה הראשונה.

הצורה השנייה, רשימת רשומות עם שדות בעלי שם, היא זו שתפגשו הכי הרבה: זה מה ששאילתת מסד נתונים, תשובת JSON מפוענחת או קובץ CSV מפוענח נותנים לכם בדרך כלל. כל רשומה היא מערך אסוציאטיבי.

יצירת מערכים מקוננים

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

הוספת שורות וערכים מקוננים

$rows[] = [...] מוסיף שורה שלמה. $arr['key'][] = $value מוסיף בתוך רשימה מקוננת, ו-PHP יוצרת את המערך הפנימי בפעם הראשונה, כך שקיבוץ ערכים לא דורש שום הכנה.

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

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

בניית טבלת HTML ממערך

מערך של שורות ממופה ישירות לטבלת HTML: המפתחות של השורה הראשונה הופכים לכותרת, וכל שורה הופכת ל-<tr>. הריצו אותו והלשונית Page תציג את הטבלה; שנו ערך או הוסיפו שורה והריצו שוב.

הצורה foreach (...): ... endforeach; היא אותה לולאה בכתיב לתבניות, כך שה-HTML נשאר קריא.

קבלת עמודה אחת מכל השורות

array_column() שולפת שדה אחד מכל שורה לרשימה שטוחה. העבירו ארגומנט שלישי כדי שהתוצאה תקבל מפתחות לפי שדה אחר, וכך רשימת רשומות הופכת לטבלת חיפוש.

מיון שורות לפי שדה

usort() ממיינת את השורות עם פונקציית השוואה. אופרטור החללית <=> מחזיר -1, 0 או 1, וזה בדיוק מה ש-usort() מצפה לו. החליפו בין $a ל-$b כדי למיין בסדר יורד.

count($players, COUNT_RECURSIVE) סופרת את 3 השורות ועוד את 6 השדות שבתוכן, ולכן היא מדפיסה 9.

טעות נפוצה: קריאה של מפתח עמוק שאולי חסר

קריאה של $config['cache']['ttl'] כשאין מפתח cache מדפיסה Warning: Undefined array key "cache", ואחריה Warning: Trying to access array offset on null לרמה הבאה. האופרטור ?? בודק את כל השרשרת בבת אחת ואף פעם לא מזהיר, ולכן זו הדרך הבטוחה לקרוא ערכים מקוננים אופציונליים.

שאלות נפוצות

איך ניגשים לערך במערך רב ממדי ב-PHP?

הוסיפו זוג סוגריים לכל רמה: $matrix[1][0] הוא שורה 1, עמודה 0, ו-$users[0]['email'] הוא האימייל של המשתמש הראשון. כל זוג סוגריים קורא מהמערך שהזוג הקודם החזיר.

איך עוברים על מערך רב ממדי בלולאה ב-PHP?

קננו foreach אחת לכל רמה: foreach ($rows as $row) { foreach ($row as $key => $value) { ... } }. במערך של רשומות בדרך כלל צריך לולאה אחת וקוראים את השדות לפי שם: $row['name'].

איך מוסיפים איבר למערך רב ממדי?

הוסיפו שורה שלמה עם $rows[] = ['name' => 'Linus', 'age' => 54];, או הוסיפו בתוך מערך מקונן עם $groups['admins'][] = 'Grace';. PHP יוצרת את המערך הפנימי אם המפתח עוד לא קיים.

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

קננו שתי קריאות ל-array_fill(): $grid = array_fill(0, 3, array_fill(0, 4, 0)); נותן 3 שורות של 4 אפסים. כל שורה היא עותק נפרד, ולכן $grid[0][0] = 5; משנה רק את השורה הראשונה.

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

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

להתחיל