Count: примеры (PHP)

Использование функции count в PHP на практических примерах
Раздел: Работа с массивами
count(Countable|array $value, int $mode = COUNT_NORMAL): int
Описание функции count

Функция count в PHP применяется для подсчета количества элементов в массиве или свойства объекта, реализующего интерфейс Countable. Её основное назначение - определение размера структуры данных.

Функция используется, когда требуется узнать число элементов в массиве, проверить, пуста ли коллекция, или ограничить обработку данных по количеству.

Аргументы функции
  • $value (обязательный) - массив или объект Countable для подсчета элементов
  • $mode (опциональный) - режим подсчета. Принимает константы:
    • COUNT_NORMAL (значение 0) - стандартный подсчет без рекурсии (по умолчанию)
    • COUNT_RECURSIVE (значение 1) - рекурсивный подсчет всех элементов многомерного массива
Базовые примеры использования
Стандартный подсчет
$array = [1, 2, 3, 4, 5];
echo count($array);
5
Пустой массив
$emptyArray = [];
echo count($emptyArray);
0
Рекурсивный подсчет
$multiArray = ['a' => [1, 2], 'b' => [3, 4, 5]];
echo count($multiArray, COUNT_RECURSIVE);
7
С объектом Countable
class MyCollection implements Countable {
    private $items = [1, 2, 3];
    
    public function count(): int {
        return count($this->items);
    }
}

$collection = new MyCollection();
echo count($collection);
3
Альтернативные функции в PHP

Функция sizeof является псевдонимом count и работает идентично. Используется реже, но поддерживается для совместимости.

iterator_count

Функция iterator_count подсчитывает элементы в итераторе. Предпочтительнее использовать с объектами, реализующими интерфейс Traversable.

$iterator = new ArrayIterator([1, 2, 3, 4]);
echo iterator_count($iterator);
4
empty

Функция empty проверяет, пуста ли переменная. Возвращает true для пустых массивов, тогда как count возвращает 0. Используется для быстрой проверки наличия данных.

Типичные ошибки
Подсчет неинициализированной переменной
echo count($undefinedVar);
Warning: count(): Parameter must be an array or an object that implements Countable
Неправильный тип данных
echo count('string');
echo count(123);
echo count(null);
1
1
0

В PHP 8 count() для скалярных значений возвращает 1, для null - 0.

Рекурсивный подсчет с циклическими ссылками
$array = [1, 2];
$array[] = &$array;
echo count($array, COUNT_RECURSIVE);
PHP Warning:  count(): Recursion detected
Изменения в последних версиях PHP
PHP 8.0

В PHP 8.0 поведение функции count() со скалярными значениями и null было изменено. Теперь count() выдает предупреждение для некорректных типов, но возвращает 1 для скаляров и 0 для null.

PHP 7.2

В PHP 7.2 было добавлено предупреждение при передаче в count() параметров некорректного типа. Ранее функция молчаливо возвращала 1.

Исторические изменения

До PHP 4.2.0 функция count() при обнаружении неинициализированной переменной возвращала 0 и инициализировала её как пустой массив.

Расширенные примеры
Подсчет с условием
Пример php
$users = [
    ['name' => 'Alice', 'active' => true],
    ['name' => 'Bob', 'active' => false],
    ['name' => 'Charlie', 'active' => true]
];

$activeUsers = array_filter($users, fn($user) => $user['active']);
echo count($activeUsers);
2
Рекурсивный подсчет многомерного массива
Пример php
$data = [
    'fruits' => ['apple', 'banana', 'orange'],
    'vegetables' => ['carrot', 'potato', ['tomato', 'cucumber']],
    'count' => 5
];

$total = count($data, COUNT_RECURSIVE);
$normal = count($data);

echo "Рекурсивно: $total, Обычно: $normal";
Рекурсивно: 11, Обычно: 3
Сравнение производительности
Пример php
$largeArray = range(1, 1000000);

$start = microtime(true);
$count = count($largeArray);
$time = microtime(true) - $start;

echo "Подсчет $count элементов занял: ".round($time*1000, 4)." мс";
Подсчет 1000000 элементов занял: 0.0129 мс
Подсчет с итераторами
Пример php
$arrayObject = new ArrayObject([1, 2, 3, 4, 5]);
echo count($arrayObject);
5
Работа с SPL объектами
Пример php
$stack = new SplStack();
$stack->push('a');
$stack->push('b');
$stack->push('c');

echo count($stack);
3
Динамическое создание массивов
Пример php
$dynamicArray = [];
for ($i = 0; $i < 10; $i++) {
    $dynamicArray[] = $i;
    echo "Шаг $i: элементов - ".count($dynamicArray)."\n";
}
Шаг 0: элементов - 1
Шаг 1: элементов - 2
...
Шаг 9: элементов - 10
Аналоги в других языках

Count в Python

В Python используется функция len() для получения длины последовательности. Работает со списками, кортежами, строками и словарями.

my_list = [1, 2, 3, 4, 5]
print(len(my_list))
5

Count в Javascript

В JavaScript у массивов есть свойство length. Для объектов нет встроенной функции подсчета свойств.

const array = [1, 2, 3, 4, 5];
console.log(array.length);
5

Count в MySQL

В SQL функция COUNT() является агрегатной и подсчитывает строки в результате запроса.

SELECT COUNT(*) FROM users WHERE active = 1;
42

PHP count function comments

En
Count Count all elements in an array or Countable object