[$a, $b] = $array; מפרקת את האיברים של מערך למשתנים נפרדים בשורה אחת: $a מקבל את $array[0], $b מקבל את $array[1]. list($a, $b) = $array; הוא הכתיב הישן של אותו הדבר, ו-['name' => $name] = $user; עושה את זה לפי מפתח.
השילוב של פירוק עם explode() הוא השימוש הקלאסי: לפצל מחרוזת, לתת שמות לחלקים ולהמשיך הלאה.
דילוג על איברים
השאירו מיקום ריק כדי לדלג עליו. אפשר גם לעצור מוקדם: איברים שלא משתמשים בהם בסוף פשוט נשארים בצד.
פירוק מערך אסוציאטיבי לפי מפתח
עם מפתחות, הסדר במערך לא משנה ולוקחים רק את השדות שצריך. המפתח נכתב לפני =>, והמשתנה אחריו.
תבניות מתקננות באותה צורה גם ברשימות: [[$x1, $y1], [$x2, $y2]] = $line; קורא שתי נקודות בבת אחת. מאז PHP 7.3 משתנה בתבנית יכול להיות גם הפניה, [, &$second] = $counts;, כך ששינוי של $second משנה את המערך.
הצבה אחת משתמשת או במיקומים או במפתחות, אף פעם לא בשניהם. [$a, 'k' => $b] = $arr; נעצרת עם Cannot mix keyed and unkeyed array entries in assignments.
החלפה בין שני משתנים
בנו מערך של שני הערכים בסדר הפוך ופרקו אותו בחזרה. לא צריך משתנה זמני.
החזרת כמה ערכים מפונקציה
פונקציה ב-PHP מחזירה ערך אחד, אבל הערך הזה יכול להיות מערך. פירוק במקום הקריאה גורם לזה להיקרא כמו כמה ערכי החזרה. ליותר משניים או שלושה ערכים, החזירו מפתחות כדי שהקורא לא יוכל לבלבל את הסדר.
פירוק בתוך foreach
אותו תחביר עובד בשורת ה-foreach, כך שכל שורה מגיעה כבר מפורקת למשתנים עם שמות. לזה מתכוונים כשמדברים על "foreach עם list()". דפוסי לולאה נוספים נמצאים בעמוד foreach.
אופרטור הפריסה (...)
שלוש הנקודות פורקות מערך במקום. בליטרל מערך, [...$a, ...$b] ממזג מערכים. בקריאה לפונקציה, f(...$args) מעביר את האיברים כארגומנטים נפרדים. בהגדרת פונקציה, ...$args אוסף ארגומנטים נוספים למערך.
לפני PHP 8.1, פריסה של מערך עם מפתחות מחרוזת הייתה שגיאה; עכשיו מפתחות מחרוזת נשמרים ומפתחות מספריים ממוספרים מחדש, אותם כללים כמו ב-array_merge(). פרמטרים משתנים כמו ...$amounts מוסברים עם שאר סוגי הפרמטרים בעמוד הפונקציות.
טעות נפוצה: פחות איברים ממשתנים
אם המערך קצר מהתבנית, המשתנים החסרים הופכים ל-null ו-PHP מדפיסה אזהרה לכל אחד מהם. זה קורה עם קלט שאתם לא שולטים בו, כמו שורה עם שדות חסרים. עבור [$name, $city, $country] = explode(',', 'Grace'); PHP מדפיסה:
Warning: Undefined array key 1 in /var/www/html/import.php on line 5
Warning: Undefined array key 2 in /var/www/html/import.php on line 5
החליטו מה צריך להיות חלק חסר ורפדו את המערך לפני הפירוק:
בתבניות עם מפתחות, מזגו קודם ברירות מחדל: ['a' => $a, 'b' => $b] = $input + ['a' => null, 'b' => null];. האופרטור + מוסיף רק מפתחות שעוד אין ב-$input.
שאלות נפוצות
מה list() עושה ב-PHP?
list($a, $b) = $array; מציב את $array[0] ב-$a ואת $array[1] ב-$b. מאז PHP 7.1 הצורה הקצרה [$a, $b] = $array; עושה בדיוק את אותו הדבר, ושתי הצורות מקבלות מפתחות: ['id' => $id] = $row;.
איך מחליפים בין שני משתנים ב-PHP?
פרקו מערך חדש שנבנה מהם בסדר הפוך: [$a, $b] = [$b, $a];. לא צריך משתנה זמני.
אפשר להשתמש ב-list() עם מערך אסוציאטיבי ב-PHP?
כן, מאז PHP 7.1. ציינו את המפתחות: ['name' => $name, 'email' => $email] = $user; או list('name' => $name) = $user;. בלי מפתחות, [$a, $b] = $user; מחפש את המפתחות 0 ו-1 ומקבל null עם אזהרה.
מה הן שלוש הנקודות (...) ב-PHP?
אופרטור הפריסה. בליטרל מערך, [...$a, ...$b] מעתיק את האיברים של שני המערכים למערך חדש. בקריאה, max(...$numbers) מעביר את האיברים כארגומנטים נפרדים. בהגדרת פונקציה, function sum(...$numbers) אוסף כל מספר של ארגומנטים למערך.
מה קורה אם במערך יש פחות איברים ממספר המשתנים ב-list()?
המשתנים העודפים מקבלים null, ו-PHP מדפיסה אזהרה כמו Undefined array key 2. רפדו קודם את המערך, למשל [$a, $b, $c] = array_pad($parts, 3, null);.