W3docs

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 — количество элементов.

Базовый пример

Подсчёт элементов плоского массива:

php— editable, runs on the server

Результат:

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
5

COUNT_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() для ясности — однако обе функции ведут себя идентично.

Практика

Практика
Что делает функция sizeof в PHP?
Что делает функция sizeof в PHP?
Was this page helpful?