Menu

array_search() ב-PHP: מציאת המפתח של ערך

array_search($value, $array) מחזירה את המפתח של האיבר הראשון ששווה ל-$value, או false כשאין כזה. כיוון שהמפתח יכול להיות 0, תמיד בדקו את התוצאה עם !== false. למדו חיפוש מחמיר, מציאת כל ההתאמות, חיפוש במערך רב ממדי עם array_column וחיפוש בלי תלות באותיות גדולות וקטנות.

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

array_search($value, $array) מחזירה את המפתח של האיבר הראשון ששווה ל-$value, או false אם שום איבר לא מתאים. כיוון שמפתח שנמצא יכול להיות 0, בדקו את התוצאה עם !== false, כמו ב-if (($key = array_search('pear', $fruits)) !== false).

אם אתם צריכים רק כן או לא, in_array() אומרת את זה ישירות. array_search() נועדה למקרים שבהם צריך לדעת איפה הערך יושב, למשל כדי לשנות או להסיר אותו.

המלכודת של 0 מול false

הבאג הנפוץ ביותר עם array_search(): הערך הוא האיבר הראשון, המפתח שלו הוא 0, ו-if ($key) מתייחס ל-0 כשקר. הקוד אומר "לא נמצא" על ערך שנמצא ממש שם. השוו עם !== false, שמתאים רק ל-false אמיתי.

ל-!= false יש אותו באג כמו ל-if ($key), כי 0 == false הוא true. רק האופרטור המחמיר מבדיל ביניהם.

חיפוש מחמיר

כמו in_array(), גם array_search() משווה עם == אלא אם מעבירים true כארגומנט השלישי. מצב רופף מאפשר למחרוזת למצוא מספר ול-null למצוא 0, וזה מחזיר מפתח שלא ציפיתם לו.

מציאת כל המפתחות עם ערך מסוים

array_search() עוצרת בהתאמה הראשונה. array_keys($array, $value) מחזירה כל מפתח מתאים כמערך; הוסיפו true להשוואה מחמירה. תוצאה ריקה אומרת שאין התאמה, ולכן אין בלבול בין 0 ל-false.

חיפוש במערך רב ממדי עם array_column

array_search() לא מסתכלת בתוך מערכים מקוננים. ברשימת שורות, חלצו את השדה שאתם מחפשים עם array_column(); המיקומים ברשימה הזו תואמים למספרי השורות, ולכן התוצאה היא האינדקס של השורה.

array_column() ממספרת את הפלט שלה מחדש מ-0, ולכן זה מסתדר רק כשהשורות ממוספרות 0, 1, 2 בלי פערים. אחרי unset() או array_filter() יש פערים במספור; הריצו קודם array_values() על השורות או השתמשו בחיפוש לפי מפתח שבשתי השורות האחרונות. ב-array_column() יש עוד על הצורה עם מפתח אינדקס.

חיפוש בלי תלות באותיות גדולות וקטנות

array_search() משווה מחרוזות בדיוק. המירו את שני הצדדים לאותיות קטנות כדי להתעלם מרישיות. array_map() שומרת על המפתחות, ולכן המפתח שמקבלים בחזרה הוא המפתח במערך המקורי.

חיפוש והחלפה או הסרה

הסיבה הרגילה לחפש היא לפעול על האיבר שנמצא. כשהמפתח ביד, הציבו כדי לשנות אותו או unset() כדי להסיר אותו, ותמיד הגנו קודם עם !== false: unset($arr[false]) מסירה בשקט את האיבר עם המפתח 0.

שאלות נפוצות

מה array_search מחזירה אם הערך לא נמצא?

false. כשהערך נמצא היא מחזירה את המפתח שלו, שיכול להיות 0 או מחרוזת ריקה, ולכן בדקו את התוצאה עם !== false, לעולם לא עם if ($key) או עם != false.

למה הבדיקה שלי עם array_search נכשלת על האיבר הראשון?

לאיבר הראשון של מערך עם אינדקסים יש את המפתח 0, ו-0 שקרי. לכן if (array_search('a', ['a', 'b'])) נכנס לענף של לא נמצא. כתבו if (array_search('a', $arr) !== false).

איך מוצאים את כל המפתחות של ערך ב-PHP?

array_search() עוצרת בהתאמה הראשונה. array_keys($array, $value, true) מחזירה כל מפתח שהערך שלו מתאים, כמערך (ריק כשאין כזה).

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

שלפו את השדה לרשימה שטוחה וחפשו בה: $i = array_search('ada@example.com', array_column($users, 'email'));, ואז קראו את השורה כ-$users[$i]. זה עובד כשהשורות ממוספרות 0, 1, 2; אחרת עברו בלולאת foreach.

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

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

להתחיל