Длина массива в PHP: count() и sizeof()

Длина массива в PHP — это количество его элементов, и стандартный способ получить это значение — count(). Чтобы посчитать элементы массива, вызовите count($array) (или sizeof($array), это алиас той же функции). count() возвращает число элементов верхнего уровня как для индексных, так и для ассоциативных массивов. Для вложенных структур COUNT_RECURSIVE считает и подмассивы, поэтому используйте его только когда такое поведение действительно нужно.

Пример длины массива PHP для подсчета элементов

Вывод:

Результат появится здесь...

Вывод:

3

Как работает этот пример

  1. $colors содержит индексный массив из трех строковых элементов.
  2. count($colors) возвращает 3 — общее количество элементов верхнего уровня. Для ассоциативных массивов поведение такое же: count() считает ключи, а не значения.
  3. Пустой массив дает 0, поэтому count() удобно использовать и для проверки на пустоту при сравнении с нулем.

Как получить длину массива в PHP

У массивов в PHP нет свойства .length. Стандартный способ получить длину массива — функция count(), и она также работает с объектами, реализующими Countable. Возвращаемый тип всегда int. Начиная с PHP 8.0, вызов count() для значений, которые нельзя считать, выбрасывает TypeError, поэтому в неоднозначных случаях проверяйте is_countable().

Частые ошибки с PHP count()

Использовать strlen() вместо count()

Неправильно:

$items = ["a", "b", "c"];
echo strlen($items); // TypeError в PHP 8+

Правильно:

echo count($items); // 3

strlen() измеряет длину строки в байтах, а не количество элементов массива.

Вызывать count() для значений, которые нельзя считать

Неправильно:

$maybeArray = "abc";
echo count($maybeArray); // TypeError в PHP 8+

Правильно:

$length = is_countable($maybeArray) ? count($maybeArray) : 0;
echo $length;

Если значение может быть скаляром или null, сначала проверяйте его через is_countable().

count() vs sizeof() в PHP

count()sizeof()
Каноническая функция из документации PHP.Алиас count() с тем же поведением и той же производительностью.
Привычна и понятна в большинстве PHP-кодовых баз.Может путать разработчиков из C/C++, где sizeof возвращает размер в байтах.

Для нового кода выбирайте count(). sizeof() существует для совместимости, но не дает преимуществ и может вводить в заблуждение читателей, знакомых с другими языками.

COUNT_NORMAL vs COUNT_RECURSIVE

$groups = ["фрукты" => ["яблоко", "груша"], "цвета" => ["красный"]];

echo count($groups);                    // 2 (ключа верхнего уровня)
echo count($groups, COUNT_RECURSIVE);   // 5 (2 ключа + 3 значения)

COUNT_NORMAL (режим по умолчанию, значение 0) считает только элементы верхнего уровня. COUNT_RECURSIVE (значение 1) проходит по всем вложенным массивам и добавляет их элементы к общему числу. Массивы с циклическими ссылками вызывают предупреждение при рекурсивном подсчете. Используйте COUNT_RECURSIVE только когда подсчет подмассивов как элементов действительно нужен — это не подсчет только конечных значений.

FAQ

Как получить длину массива в PHP?

Вызовите count($array), чтобы получить количество элементов. Это работает для индексных массивов, ассоциативных массивов и объектов, реализующих Countable. Пустой массив возвращает 0.

Работает ли count() с ассоциативными массивами?

Да. count() считает ключи независимо от того, числовые они или строковые. count(["a" => 1, "b" => 2]) возвращает 2.

Что произойдет, если передать не массив в count() в PHP 8?

В PHP 8.0+ для значений, которые нельзя считать (строки, числа, null, обычные объекты), выбрасывается TypeError. В PHP 7.2+ вместо этого выдавалось предупреждение и возвращалось 1 для скаляров (и 0 для null), что могло скрывать баги.