Menu

count() ב-PHP: אורך מערך ומספר איברים

count($arr) מחזירה את מספר האיברים במערך PHP, ולכן count(['a', 'b', 'c']) הוא 3. למדו איך סופרים מערכים מקוננים עם COUNT_RECURSIVE, מה הקשר בין sizeof() ל-count(), איך סופרים ערכים שמתאימים לתנאי, ולמה count(null) זורקת TypeError מאז PHP 8.

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

count($arr) מחזירה את מספר האיברים במערך: count(['red', 'green', 'blue']) הוא 3. למערכים ב-PHP אין מאפיין length, ולכן count() היא הדרך לקבל את האורך או הגודל של מערך.

count() מהירה: PHP שומרת את הגודל בתוך המערך, ולכן ספירה של מיליון איברים עולה כמו ספירה של שלושה.

ספירת מערך רב ממדי

כברירת מחדל count() סופרת רק את הרמה העליונה. העבירו COUNT_RECURSIVE (או 1) כארגומנט השני כדי לספור כל איבר בכל עומק. גם המערכים המקוננים עצמם נספרים, ולכן הסכום גדול לעיתים קרובות ממספר ערכי העלים.

שני הקיצורים מניחים בדיוק שתי רמות. לקינון עמוק יותר במערך רב ממדי, ספרו את העלים עם array_walk_recursive(): $n = 0; array_walk_recursive($arr, function () use (&$n) { $n++; });.

count מול sizeof

sizeof() היא כינוי של count(): אותם ארגומנטים, אותה תוצאה. השתמשו ב-count(). בה משתמשים כמעט כל קוד ה-PHP והתיעוד, ו-sizeof מרמזת על גודל בבתים לכל מי שמכיר C.

ספירת ערכים שמתאימים לתנאי

ל-count() אין ארגומנט של תנאי. סננו קודם, ואז ספרו: array_filter() שומרת את האיברים שה-callback שלכם מקבל. כדי לספור כמה פעמים מופיע כל ערך, השתמשו ב-array_count_values().

ספירת תווים במחרוזת

count() מיועדת למערכים. למחרוזת, השתמשו ב-strlen() לבתים או ב-mb_strlen() לתווים; הן נבדלות ברגע שבטקסט יש סימנים דיאקריטיים או יפנית. עמוד strlen מסביר את ההבדל. כדי לספור מילים, פצלו קודם.

str_word_count() מתייחסת לאותיות שאינן ASCII כמפרידים, ולכן naïve נספרת כשתי מילים. פיצול לפי רווחים צפוי יותר לטקסט אמיתי.

count() על null או על מחרוזת זורקת שגיאה

מאז PHP 8, count() מקבלת רק מערכים ואובייקטים שמממשים Countable. כל דבר אחר זורק TypeError, בעוד PHP 7.2 עד 7.4 החזירו 0 (עבור null) או 1 (עבור מחרוזת או מספר) עם אזהרה. הסיבה הרגילה היא משתנה שלפעמים הוא null, כמו מפתח חסר או פונקציה שלא החזירה כלום.

תנו לערך ברירת מחדל של מערך ריק עם ??, והספירה תהיה 0:

בדיקה אם מערך ריק

כדי לשאול "האם יש משהו במערך הזה", השוו למערך ריק או השתמשו ב-empty(). גם count($arr) === 0 עובד, אבל רק כש-$arr הוא בוודאות מערך.

empty($x) אף פעם לא זורקת, גם כש-$x לא מוגדר או null, ולכן היא הבדיקה הבטוחה יותר לערך שאולי אינו מערך. שאר הכללים שלה (גם מחרוזת ריקה ו-"0" נחשבים ריקים) נמצאים בעמוד empty.

שאלות נפוצות

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

השתמשו ב-count($arr). היא מחזירה את מספר האיברים כמספר שלם, ולכן count([10, 20, 30]) הוא 3. למערכים ב-PHP אין מאפיין length.

מה ההבדל בין count ל-sizeof ב-PHP?

אין הבדל. sizeof() היא כינוי של count() ומקבלת את אותם ארגומנטים. רוב הקוד משתמש ב-count(), ו-sizeof() עלולה להטעות קוראים שמכירים C, שבה היא מציינת בתים.

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

count($arr) סופרת רק את הרמה העליונה. count($arr, COUNT_RECURSIVE) סופרת כל איבר בכל עומק, וגם המערכים המקוננים נספרים כאיברים.

למה count() זורקת TypeError ב-PHP 8?

מאז PHP 8.0, count() מקבלת רק מערכים ואובייקטים שמממשים Countable. count(null) זורקת TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given, ו-count('abc') את אותה שגיאה עם string given. השתמשו ב-count($x ?? []) לערך שעשוי להיות null, וב-strlen() למחרוזות.

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

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

להתחיל