count($arr) возвращает число элементов массива: count(['red', 'green', 'blue']) равно 3. Свойства length у массивов PHP нет, поэтому длину или размер массива получают через 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() в PHP 8 выбрасывает TypeError?
Начиная с PHP 8.0 count() принимает только массивы и объекты, реализующие Countable. count(null) выбрасывает TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given, а count('abc') то же самое с string given. Для значения, которое может быть null, используйте count($x ?? []), а для строк strlen().