sizeof()
Узнайте, как функция PHP sizeof() считает элементы массива, как она связана с count() и как COUNT_RECURSIVE работает с вложенными массивами.
Введение
PHP поставляется со множеством встроенных функций для работы с массивами. sizeof() — одна из простейших: она возвращает количество элементов в массиве. На этой странице объясняется, как работает sizeof(), как она ведёт себя с вложенными (многомерными) массивами и почему она является просто псевдонимом для count().
Что такое sizeof()?
sizeof() возвращает количество элементов в массиве. Это псевдоним функции count() — обе функции одинаковы внутри, поэтому они разделяют идентичное поведение, возвращаемые значения и производительность. Всё, что можно сделать с помощью count(), можно сделать и с помощью sizeof(), и наоборот.
Поскольку это псевдоним, а не отдельная реализация, нет ситуации, когда одна из них была бы быстрее или мощнее другой.
Синтаксис
sizeof(array|Countable $value, int $mode = COUNT_NORMAL): int| Параметр | Обязателен | Описание |
|---|---|---|
$value | Да | Массив (или объект Countable), элементы которого нужно подсчитать. |
$mode | Нет | Способ подсчёта. COUNT_NORMAL (по умолчанию) считает только элементы верхнего уровня; COUNT_RECURSIVE также считает элементы внутри вложенных массивов. |
Функция возвращает int — количество элементов.
Базовый пример
Подсчёт элементов плоского массива:
Результат:
3Массив содержит три элемента, поэтому sizeof() возвращает 3.
Подсчёт вложенных массивов с COUNT_RECURSIVE
По умолчанию sizeof() считает только элементы верхнего уровня. Чтобы также подсчитать элементы внутри вложенных массивов, передайте COUNT_RECURSIVE в качестве второго аргумента:
<?php
$data = [
'fruits' => ['apple', 'banana'],
'vegetables' => ['carrot'],
];
echo sizeof($data); // top-level keys only
echo "\n";
echo sizeof($data, COUNT_RECURSIVE); // top-level + nested itemsРезультат:
2
5COUNT_NORMAL видит два ключа верхнего уровня (fruits и vegetables). COUNT_RECURSIVE считает эти два ключа плюс три значения внутри них (apple, banana, carrot), что даёт 5.
sizeof() и count()
Используйте то имя, которое кажется вам более читабельным — результат всегда одинаков:
<?php
$nums = [10, 20, 30, 40];
var_dump(sizeof($nums) === count($nums));Результат:
bool(true)На практике официальная документация PHP рекомендует использовать count(), поскольку имя sizeof легко спутать с оператором sizeof из языка C (который измеряет размер в памяти, а не количество элементов). Использование count() обеспечивает согласованность кода с большинством современных PHP-проектов.
Распространённые ошибки
- Функция не считает символы в строке.
sizeof('hello')вызывает предупреждение и возвращает1, а не5. Для определения длины строки используйтеstrlen(). - Функция не суммирует размеры нескольких массивов.
sizeof()принимает один аргумент-массив, а не несколько. - Пустой массив возвращает
0. Это позволяет безопасно использовать её непосредственно в условии цикла, напримерfor ($i = 0; $i < sizeof($arr); $i++).
Заключение
sizeof() возвращает количество элементов в массиве и является прямым псевдонимом count(). Передайте COUNT_RECURSIVE, если нужно также подсчитать вложенные элементы. В новом коде предпочтительнее использовать count() для ясности — однако обе функции ведут себя идентично.