Способы получения числа элементов в массиве PHP

Раздел: Основы PHP -> Работа с массивами

Определение длины массива: функция count()

Наиболее эффективный способ узнать количество элементов в массиве - использовать встроенную функцию count(). Она возвращает целое число - количество элементов массива. Функция count() работает как с индексными, так и с ассоциативными массивами. Пример:

<?php
$arr = [1, 2, 3];
echo count($arr); // 3
?>

Также доступен псевдоним sizeof(), который работает идентично.

Как подсчитать элементы в многомерном массиве?

Если массив содержит вложенные массивы, простой count() посчитает только элементы верхнего уровня. Для подсчета всех элементов, включая вложенные, используется флаг COUNT_RECURSIVE (или 1). Пример:

<?php
$matrix = [[1,2], [3,4]];
echo count($matrix, COUNT_RECURSIVE); // 6 (4 числа + 2 массива)
?>

Обратите внимание, что рекурсивный подсчет также учитывает сами массивы как элементы.

Проблема: неожиданный результат при рекурсивном подсчете

Поскольку каждый вложенный массив считается за один элемент верхнего уровня, итоговое число может быть больше ожидаемого. Например, для двумерного массива 2x2 результат будет 6, а не 4. Если нужно подсчитать только конечные элементы, потребуется собственная функция.

Как проверить, пуст ли массив?

Вместо сравнения длины с нулем (count($arr) == 0) можно использовать конструкцию empty(), которая также возвращает true для пустого массива. Это более кратко:

<?php
$empty = [];
if (empty($empty)) { echo 'Массив пуст'; }
?>

Функция count() на пустом массиве вернет 0.

Проблема: count() на несуществующей переменной

Если передать в count() неопределенную переменную, в PHP 8.0 и выше будет выброшено исключение TypeError. В более старых версиях возвращался 0 с предупреждением. Поэтому перед вызовом count() рекомендуется проверять существование переменной с помощью isset() или is_array().

Как подсчитать элементы с помощью цикла?

Хотя это неэффективно, можно вручную перебрать массив и увеличивать счетчик. Это полезно, если нужно выполнить дополнительные действия при подсчете. Пример:

<?php
$arr = ['a','b','c'];
$count = 0;
foreach ($arr as $value) {
    $count++;
}
echo $count; // 3
?>

Такой метод может быть медленнее на больших массивах, поэтому его следует применять только при особой необходимости.

Как получить количество элементов после фильтрации?

Иногда нужно подсчитать элементы, удовлетворяющие условию. Комбинация array_filter() и count() дает такой результат:

<?php
$numbers = [1,2,3,4,5,6];
$even = array_filter($numbers, fn($v) => $v % 2 == 0);
echo count($even); // 3
?>
Пример
<?php
// Пример 1: count() с индексным массивом
$arr = ['apple', 'banana', 'cherry'];
echo 'Количество: ' . count($arr);
?>
Количество: 3
Пример
<?php
// Пример 2: count() с ассоциативным массивом
$user = ['name' => 'John', 'age' => 30, 'city' => 'NYC'];
echo count($user); // 3
?>
3
Пример
<?php
// Пример 3: sizeof() - псевдоним count()
$arr = [10, 20, 30];
echo sizeof($arr); // 3
?>
3
Пример
<?php
// Пример 4: рекурсивный подсчет трехмерного массива
$cube = [[[1,2],[3,4]],[[5,6],[7,8]]];
echo count($cube, COUNT_RECURSIVE);
?>
14
Пример
<?php
// Пример 5: проверка пустоты массива через empty()
$data = [];
if (empty($data)) {
    echo 'Массив не содержит элементов';
}
?>
Массив не содержит элементов
Пример
<?php
// Пример 6: безопасный вызов count() с проверкой
$var = null;
if (is_array($var)) {
    echo count($var);
} else {
    echo 'Переменная не является массивом';
}
?>
Переменная не является массивом
Пример
<?php
// Пример 7: подсчет элементов после array_filter
$numbers = [1,2,3,4,5,6];
$greaterThanThree = array_filter($numbers, function($v) { return $v > 3; });
echo count($greaterThanThree);
?>
3
Пример
<?php
// Пример 8: использование с объектом Countable (ArrayObject)
$obj = new ArrayObject([1,2,3]);
echo count($obj); // 3
?>
3
Пример
<?php
// Пример 9: ошибка - передача строки в count() (PHP 8+)
// echo count('hello'); // TypeError: count(): Argument #1 ($value) must be of type Countable|array
?>
Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array

длина массива PHP - comments

En
Php длина массива (php)