count()
Функция count() в PHP возвращает количество элементов в array или свойств в object. Узнайте синтаксис, режимы и типичные ошибки.
Функция count() — встроенная функция PHP, которая возвращает количество элементов в array. Она также может подсчитывать object, если тот реализует интерфейс Countable. Это одна из наиболее часто используемых функций для работы с array в PHP — как правило, она применяется, чтобы узнать количество элементов в списке перед его обходом, разбивкой на страницы или валидацией.
В этой главе рассматриваются синтаксис, необязательный режим рекурсивного подсчёта, поведение count() с object и граничными значениями, а также наиболее распространённые ошибки.
Синтаксис функции count()
Синтаксис функции count() прост. Она принимает один аргумент — array или object, элементы которого нужно подсчитать. Функция возвращает целое число, представляющее количество элементов или свойств.
<?php
count(mixed $array_or_object, int $mode = COUNT_NORMAL): intПримечание: Типизированная сигнатура выше соответствует PHP 8.0+. В PHP 8.0+ передача значения неисчисляемого типа (например, string или integer) вызывает
ValueError. В более старых версиях PHP строгих подсказок типов нет, но функция работает идентично. Примечание:sizeof()— устаревший псевдоним функцииcount()и ведёт себя абсолютно так же.
Второй аргумент, $mode, является необязательным и определяет поведение функции count(). Он принимает два возможных значения:
COUNT_NORMAL: Режим по умолчанию, поведение аналогично вызовуcount()без параметра$mode. Просто подсчитывает количество элементов в array или свойств в object.COUNT_RECURSIVE: Этот режим рекурсивно подсчитывает элементы вложенных array и object.
<?php
$data = array('apple', array('banana', 'cherry'));
echo count($data); // Output: 2
echo count($data, COUNT_RECURSIVE); // Output: 4При COUNT_NORMAL (по умолчанию) count($data) возвращает 2: внешний array содержит два элемента — string 'apple' и внутренний array. При COUNT_RECURSIVE PHP также подсчитывает элементы внутри каждого вложенного array, поэтому возвращается 4: 'apple', сам внутренний array, 'banana' и 'cherry'. Используйте рекурсивный режим только тогда, когда вам действительно нужно общее количество по всем уровням вложенности — он обходит всю структуру и работает медленнее на больших, глубоко вложенных array.
Примеры использования функции count()
Рассмотрим несколько практических примеров того, как функция count() может применяться для подсчёта элементов в array и свойств в object.
Пример 1: Подсчёт элементов в array
Подсчёт элементов в array в PHP
В этом примере у нас есть array $fruits, содержащий три элемента. Функция count() возвращает 3, что соответствует общему количеству элементов в array.
Пример 2: Подсчёт свойств в object
Подсчёт свойств в object в PHP
<?php
class Person implements Countable
{
public $name;
public $age;
public function count()
{
return count(get_object_vars($this));
}
}
$person = new Person();
$person->name = 'John';
$person->age = 30;
echo count($person); // Output: 2В этом примере у нас есть простой класс Person с двумя публичными свойствами: $name и $age. Мы создаём новый экземпляр класса Person и задаём значения его свойств. Поскольку класс реализует интерфейс Countable, вызов count($person) обращается к пользовательскому методу count(), который возвращает 2. Это демонстрирует, как можно настроить поведение count() для object.
Примечание: Без интерфейса
Countableпередача обычного object вcount()вызываетTypeErrorв PHP 8.0+. Функцияcount()не подсчитывает свойства object автоматически — если вам это нужно, используйтеcount(get_object_vars($obj))напрямую.
Типичные ошибки и граничные случаи
Некоторые особенности поведения count() регулярно удивляют разработчиков:
- Подсчёт
nullили скалярных значений вызывает исключение в PHP 8. В PHP 7.2–7.4count(null)выдавал предупреждение и возвращал0, а подсчёт неисчисляемого скалярного значения возвращал1. Начиная с PHP 8.0, передача любого неисчисляемого значения (null, string, integer) вызываетTypeError. Проверяйте значение заранее, если оно может оказаться не array. count()— не функция для измерения длины string. Для подсчёта символов в string используйтеstrlen(), а неcount().- По умолчанию подсчитывается только верхний уровень. Как показано выше, вложенные array считаются одним элементом, если не передать
COUNT_RECURSIVE.
<?php
$value = null;
// Safe even when $value is not an array:
$total = is_array($value) ? count($value) : 0;
echo $total; // Output: 0Используйте is_array(), чтобы убедиться, что значение является array, перед вызовом count() для данных, тип которых вы не контролируете (например, декодированный JSON или строка из базы данных).
Связанные функции
array_count_values()— подсчитывает, сколько раз каждое уникальное значение встречается в array.in_array()— проверяет, существует ли значение в array.array_push()— добавляет элементы в array (размер которого затем можно узнать с помощьюcount()).- Многомерные array — именно здесь
COUNT_RECURSIVEнаиболее полезен. - Цикл foreach — перебирает элементы, количество которых вы только что подсчитали.
Заключение
Функция count() — небольшой, но незаменимый инструмент для работы с array в PHP. Используйте её для определения размера списка перед циклом или разбивкой на страницы, обращайтесь к COUNT_RECURSIVE, когда нужен полный подсчёт по вложенным array, и помните: в PHP 8.0+ необходимо передавать настоящий array (или object, реализующий Countable) — защищайте неопределённые значения с помощью is_array(). Следуя этим правилам, count() станет надёжным и читаемым способом оценить размер структур данных, с которыми работает ваш код.