array_column($rows, $column) מחזירה את הערך של $column מכל שורה ברשימת שורות. היא הופכת טבלת רשומות למערך שטוח של שדה אחד, וזה מה שצריך לפני implode, in_array, array_sum או array_search.
השורות יכולות להגיע מכל מקום: תשובת JSON מפוענחת, קובץ CSV או שאילתת מסד נתונים שהחזירה מערך של מערכים אסוציאטיביים.
שימוש במפתח האינדקס לבניית זוגות מפתח וערך
הארגומנט השלישי מציין שדה שהערך שלו הופך למפתח של כל תוצאה. array_column($users, 'name', 'id') היא הדרך הרגילה לבנות טבלת חיפוש מ-id לשם, למשל לרשימת <select>.
אם לשתי שורות יש אותו ערך אינדקס, השורה המאוחרת דורסת את המוקדמת.
מתן מפתחות לשורות שלמות לפי id עם null
העבירו null כעמודה כדי לשמור כל שורה מלאה, עם מפתח חדש לפי שדה האינדקס. חיפוש שורה לפי id הופך אז לגישה ישירה למפתח במקום לולאה.
בנו את האינדקס פעם אחת וכל חיפוש אחרי זה מיידי, וזה חשוב כשמחפשים הרבה מזהים בתוך לולאה.
מציאת שורה עם array_column ו-array_search
כדי למצוא איזו שורה מכילה ערך מסוים, חפשו בעמודה והשתמשו במיקום שמקבלים בחזרה. בדקו את התוצאה עם !== false, כי התאמה בשורה הראשונה מחזירה 0.
זה מסתמך על כך של-$users יש את המפתחות 0, 1, 2, כי array_column מחזירה רשימה. אם המערך סונן ויש בו פערים, קראו קודם ל-array_values($users). העמוד array_search מכסה את המלכודת של false מול 0 בפירוט.
סכום, ספירה או ממוצע של עמודה
array_column משתלבת טוב עם פונקציות העזר המתמטיות: חלצו את השדה, ואז סכמו אותו.
לערך שמחושב מכמה שדות, כמו כמות כפול מחיר, array_map היא הכלי, כמו בשורה האחרונה.
array_column עם אובייקטים
ברשימת אובייקטים, array_column קוראת מאפיינים ציבוריים. מאפיינים פרטיים ומוגנים לא גלויים לה.
הקריאה השנייה מחזירה מערך ריק: password הוא פרטי, ולכן כל אובייקט מדולג.
שורות עם שדה חסר מדולגות
array_column לא ממלאת ערך חלופי בשורה שחסר בה השדה. התוצאה יכולה להיות קצרה יותר מהקלט, ולכן המיקומים שלה כבר לא תואמים לשורות.
בתוצאה הראשונה יש שני טלפונים ואין שום רמז לכך שלבוב לא היה טלפון. עם השם כמפתח האינדקס, אפשר לראות של מי כל מספר, וזו הצורה הבטוחה יותר בכל פעם שלחלק מהשורות עשוי לחסור השדה.
שאלות נפוצות
מה array_column עושה ב-PHP?
היא מקבלת רשימת שורות (מערכים או אובייקטים) ומחזירה את הערך של שדה אחד מכל שורה: array_column($users, 'email') נותנת מערך שטוח של אימיילים. שורות שאין בהן את השדה מדולגות.
איך יוצרים מערך מפתח וערך משורות?
העבירו את שדה המפתח כארגומנט השלישי: array_column($users, 'name', 'id') מחזירה [id => name, ...]. העבירו null כארגומנט השני, array_column($users, null, 'id'), כדי לשמור שורות שלמות עם מפתח לפי id.
מה array_column עושה כשבשורה חסר השדה?
היא מדלגת על השורה, ולכן array_column($people, 'phone') יכולה להחזיר פחות ערכים ממספר השורות והמיקומים כבר לא תואמים. הוסיפו מפתח אינדקס, array_column($people, 'phone', 'name'), כדי לראות מאיזו שורה הגיע כל ערך.
האם array_column עובדת עם אובייקטים?
כן, עם מערך של אובייקטים היא קוראת מאפיינים ציבוריים, וגם מאפיינים שזמינים דרך __get כשהמחלקה מגדירה __isset. מאפיינים פרטיים ומוגנים מדולגים.