تعيد 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() العناصر التي تقبلها دالة الاستدعاء. ولعدّ مرات ظهور كل قيمة، استخدم 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. لا توجد خاصية length في مصفوفات PHP.
ما الفرق بين 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() للنصوص.