
Проверка пустого массива в PHP – частая задача при работе с формами, результатами запросов к базе данных и обработкой API-ответов. Ошибка на этом этапе может привести к предупреждениям уровня Warning, некорректной логике условий или лишним итерациям. PHP предоставляет несколько инструментов для таких проверок, и каждый из них ведёт себя по-разному в зависимости от типа данных и контекста использования.
Массив в PHP может быть пустым по разным причинам: он только что объявлен, результат функции не содержит данных, либо переменная была инициализирована, но не заполнена. При этом пустой массив – это не то же самое, что null или несуществующая переменная. Непонимание этих различий часто становится источником логических ошибок, особенно при сложных условиях и вложенных проверках.
На практике используются функции empty(), count(), оператор строгого сравнения с [], а также конструкции с isset(). Каждый способ имеет ограничения: одни не различают пустоту и отсутствие значения, другие требуют дополнительных вычислений. Выбор подходящего метода зависит от того, нужно ли отличать пустой массив от null, учитывать тип данных или проверять массив перед циклом foreach.
В этой статье разобраны прикладные способы проверки пустого массива в PHP с пояснениями, в каких ситуациях каждый из них даёт предсказуемый результат и где может привести к неожиданному поведению.
Проверка пустоты массива с помощью empty()

Функция empty() в PHP используется для определения, содержит ли переменная значение, которое интерпретируется как пустое. При передаче массива функция возвращает true, если массив не содержит элементов, и false – если хотя бы один элемент присутствует. Проверка выполняется без генерации предупреждений, даже если переменная не была объявлена.
Базовый пример применения:
empty($data) вернёт true в следующих случаях:
- массив объявлен, но не содержит элементов: []
- переменная не определена
- переменной присвоено значение null
Это поведение делает empty() удобным для быстрых проверок входных данных, но одновременно создаёт риск логических ошибок, если требуется строгое различие между пустым массивом и отсутствием переменной.
Пример, где возможна потеря контроля над логикой:
- результат запроса к базе данных вернул null
- массив инициализирован, но данные не загружены
В обоих случаях empty() вернёт одинаковый результат, хотя причины состояния различаются. Поэтому функция подходит для сценариев, где важно лишь наличие данных, а не источник пустоты.
Рекомендуемые случаи использования empty():
- проверка данных формы перед обработкой
- валидация параметров, полученных из $_GET и $_POST
- предотвращение выполнения foreach при отсутствии элементов
Если требуется определить именно пустой массив, а не null или несуществующую переменную, следует комбинировать empty() с is_array() или использовать строгие проверки, рассмотренные в следующих разделах.
Сравнение массива с пустым значением через === []
![Сравнение массива с пустым значением через === []](/wp-content/images4/kak-proverit-pustoj-li-massiv-php-ojyek1x1.jpg)
Строгое сравнение массива с пустым литералом [] – самый точный способ определить, что переменная содержит именно пустой массив, а не другое «пустое» значение. Оператор === в PHP проверяет одновременно тип данных и содержимое, поэтому результат не зависит от неявных преобразований.
Выражение $data === [] вернёт true только при выполнении двух условий: переменная существует и её тип – массив без элементов. Если переменная равна null, не определена или содержит любое другое значение, результат будет false. Это делает проверку предсказуемой в условиях строгой логики.
Поведение строгого сравнения наглядно демонстрирует различие между подходами:
| Значение переменной | $data === [] |
|---|---|
| Пустой массив [] | true |
| null | false |
| Необъявленная переменная | false |
| Массив с элементами | false |
Такой подход особенно полезен при работе с функциями и методами, которые по контракту всегда возвращают массив. В этом случае сравнение с [] позволяет точно определить отсутствие данных без дополнительных проверок типа.
Рекомендуемые сценарии использования:
- проверка результата функций, гарантированно возвращающих массив
- разграничение пустого результата и ошибки выполнения
- логика, зависящая от факта инициализации массива
Недостаток метода заключается в необходимости предварительной уверенности, что переменная объявлена. При сравнении необъявленной переменной PHP сгенерирует уведомление уровня Notice, поэтому в таких случаях проверку следует комбинировать с isset() или использовать её внутри контролируемого контекста.
Определение наличия элементов массива с помощью count()

Функция count() возвращает количество элементов в массиве и подходит для прямой проверки наличия данных. Если массив пуст, результат будет равен 0, при наличии хотя бы одного элемента – целое число больше нуля. Такой подход ясен при чтении кода и не требует анализа «пустых» значений.
На практике используются два варианта условий:
- count($items) === 0 – проверка пустого массива
- count($items) > 0 – подтверждение наличия элементов
Функция работает только с массивами и объектами, реализующими интерфейс Countable. Перед вызовом важно учитывать тип переменной, иначе возможны предупреждения. В ситуациях с динамическими данными рекомендуется предварительно проверять тип через is_array().
Особенность count() заключается в том, что она не различает причины пустоты. Инициализированный массив без элементов и массив, очищенный после обработки, будут интерпретироваться одинаково. Это удобно, когда требуется лишь факт наличия данных, без уточнения состояния переменной.
Типовые сценарии использования:
- контроль выполнения логики при пакетной обработке данных
- условное выполнение цикла for или foreach
Для кода, где проверка количества выполняется многократно, рекомендуется сохранять результат count() в переменную, чтобы избежать повторных вызовов функции и повысить предсказуемость логики.
Отличие пустого массива от null при проверках
Пустой массив и значение null часто воспринимаются как равнозначные состояния, однако в PHP они отражают разные этапы жизненного цикла данных. Пустой массив означает, что переменная инициализирована и готова к работе, но не содержит элементов. null указывает на отсутствие значения как такового.
Это различие критично при построении условий. Например, empty() вернёт одинаковый результат для [] и null, скрывая причину отсутствия данных. В результате логика обработки может сработать раньше времени или пропустить этап инициализации.
Для точного контроля состояния следует использовать явные проверки:
is_array($data) позволяет убедиться, что переменная является массивом, даже если он пуст. Проверка $data === null отделяет отсутствие значения от пустой структуры данных.
Типовой подход при работе с результатами функций:
Функция вернула null – произошла ошибка или данные не были получены. Функция вернула пустой массив – запрос выполнен корректно, но результат не содержит элементов. Эти состояния должны обрабатываться разными ветками кода.
Рекомендуемая последовательность проверки:
Сначала определить, является ли переменная null, затем убедиться, что тип – массив, и только после этого проверять его содержимое. Такой порядок исключает неоднозначные условия и повышает прозрачность логики.
Проверка массива перед перебором в foreach

Цикл foreach в PHP безопасно обрабатывает пустой массив, но при передаче null или неинициализированной переменной возникает предупреждение. Поэтому перед перебором важно убедиться, что переменная содержит именно массив, даже если он не содержит элементов.
Наиболее надёжный вариант – проверка типа через is_array(). Она гарантирует, что в цикл попадёт корректная структура данных, а не результат ошибки или отсутствия значения. Такой подход особенно актуален при работе с внешними источниками: API, базами данных, пользовательским вводом.
Использование empty() перед foreach допустимо, но имеет ограничения. Эта функция не различает пустой массив и null, поэтому цикл может быть пропущен не из-за отсутствия элементов, а из-за некорректного состояния данных. В логике, где важно понимать причину, это создаёт скрытые ошибки.
Если требуется запускать цикл только при наличии элементов, проверка количества через count() даёт явный контроль. Условие на значение больше нуля исключает лишние итерации и делает намерение кода очевидным при чтении.
Рекомендуемая практика при переборе данных:
Сначала проверить, что переменная является массивом, затем при необходимости убедиться, что он не пуст, и только после этого использовать foreach. Такой порядок предотвращает предупреждения и упрощает отладку в сложных сценариях обработки данных.
Использование isset() и его ограничения для массивов

Функция isset() проверяет, существует ли переменная и не имеет ли она значение null. При работе с массивами она отвечает только на вопрос инициализации, но не позволяет определить, содержит ли массив элементы.
Если массив объявлен, даже в виде пустого литерала [], вызов isset($items) вернёт true. Это поведение часто вводит в заблуждение при попытке использовать isset() как замену проверки пустоты. Фактическое содержимое массива при этом игнорируется.
Основное назначение isset() при работе с массивами – контроль доступа к переменной без генерации предупреждений. Это особенно полезно в условиях, где переменная может быть не объявлена, например при чтении данных из внешнего источника.
Функция также применяется для проверки отдельных элементов массива. Выражение isset($data[‘key’]) вернёт false, если ключ отсутствует или его значение равно null, но не покажет, пуст ли сам массив.
Рекомендованный подход:
Использовать isset() для подтверждения существования массива или его элемента, а проверку наличия данных выполнять через count(), строгое сравнение с [] или другие целевые методы. Такое разделение обязанностей делает условия прозрачными и снижает вероятность логических ошибок.
Вопрос-ответ:
Почему empty() возвращает true для пустого массива и для null?
Функция empty() проверяет не тип данных, а «пустотность» значения по внутренним правилам PHP. Для неё пустой массив, null и необъявленная переменная находятся в одной категории. Поэтому empty() не подходит для случаев, где нужно отличать отсутствие значения от инициализированного, но пустого массива.
Можно ли безопасно использовать foreach без проверки массива?
Если переменная гарантированно содержит массив, foreach можно вызывать напрямую — пустой массив не вызовет ошибок. Проблемы возникают, когда переменная равна null или не была объявлена: PHP сгенерирует предупреждение. В таких ситуациях предварительная проверка типа через is_array() помогает избежать сообщений об ошибках.
Чем проверка через count() отличается от сравнения с []?
count() определяет количество элементов и возвращает число, а сравнение с [] проверяет и тип, и содержимое. count() удобно применять, когда требуется логика, завязанная на количестве элементов. Сравнение с [] подходит для строгого контроля состояния переменной, если известно, что она должна быть массивом.
Почему isset() не подходит для проверки пустого массива?
isset() возвращает true для любого объявленного массива, независимо от наличия элементов. Она отвечает только на вопрос существования и отсутствия значения null. Поэтому с её помощью нельзя понять, содержит ли массив данные.
Как корректно отличить пустой массив от ошибки получения данных?
Если функция может вернуть null при ошибке и массив при успешном выполнении, сначала следует проверить значение на null. После этого можно определить, является ли результат массивом, и только затем анализировать его содержимое. Такой порядок позволяет разделить ситуацию ошибки и корректный, но пустой результат.
Какой способ проверки пустого массива выбрать, если данные приходят из разных источников?
При работе с формами, API и базой данных лучше разделять этапы проверки. Сначала стоит убедиться, что переменная существует и не равна null, затем проверить тип через is_array(). После этого выбирается метод проверки содержимого: count() подходит, если логика зависит от количества элементов, а строгое сравнение с [] — если нужно зафиксировать состояние «инициализирован, но без данных». Такой подход снижает риск неправильных условий при нестабильных входных данных.
