Длина массива в PHP: count() и sizeof()
Длина массива в PHP — это количество его элементов, и стандартный способ получить это значение — count(). Чтобы посчитать элементы массива, вызовите count($array) (или sizeof($array), это алиас той же функции). count() возвращает число элементов верхнего уровня как для индексных, так и для ассоциативных массивов. Для вложенных структур COUNT_RECURSIVE считает и подмассивы, поэтому используйте его только когда такое поведение действительно нужно.
Пример длины массива PHP для подсчета элементов
Вывод:
Результат появится здесь...
Вывод:
3
Как работает этот пример
$colorsсодержит индексный массив из трех строковых элементов.count($colors)возвращает3— общее количество элементов верхнего уровня. Для ассоциативных массивов поведение такое же:count()считает ключи, а не значения.- Пустой массив дает
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), что могло скрывать баги.