W3docs

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

php— editable, runs on the server

В этом примере у нас есть 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.4 count(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() станет надёжным и читаемым способом оценить размер структур данных, с которыми работает ваш код.

Практика

Практика
Какова функциональность функции 'count()' в PHP?
Какова функциональность функции 'count()' в PHP?
Was this page helpful?