
В PHP массив считается пустым, если он не содержит ни одного элемента. Это можно проверить несколькими способами, каждый из которых подходит для разных случаев. Основной метод – использовать функцию empty(), которая возвращает true не только для пустых массивов, но и для других «пустых» значений, таких как null, 0, пустая строка и false.
Чтобы убедиться, что переменная – именно массив и он пуст, сначала следует использовать is_array() в связке с count() или функцией empty(). Например, конструкция is_array($arr) && count($arr) === 0 исключает ложные срабатывания, если переменная не является массивом. Это особенно важно при работе с пользовательским вводом или внешними API.
Функция count() возвращает точное количество элементов, даже если массив содержит нулевые значения или пустые строки. Это делает её предпочтительной для точной проверки: count($arr) === 0 однозначно означает, что массив пуст.
Не рекомендуется использовать empty($arr) без предварительной проверки типа, если переменная может быть не массивом. В противном случае возможны логические ошибки. Альтернатива – строгое сравнение: $arr === [], которое гарантирует, что переменная – пустой массив и ничто иное.
Как проверить, пустой ли массив с помощью функции empty()
Функция empty() позволяет определить, содержит ли массив элементы. Она возвращает true, если массив пустой, и false – если в массиве есть хотя бы один элемент.
- Пустой массив:
array()или[] - Результат:
empty([])вернётtrue
Пример использования:
$data = [];
if (empty($data)) {
echo "Массив пуст";
}
Особенности:
empty()не вызывает ошибку при обращении к несуществующей переменной- Проверка
empty($array)эквивалентна проверке!isset($array) || $array == false, но короче и безопаснее
Рекомендуется использовать empty() при необходимости избежать предупреждений при доступе к необъявленным массивам и для компактной проверки на отсутствие элементов.
Чем отличается проверка массива через empty() и count()
Функция empty() проверяет значение на «пустоту», включая не только пустой массив, но и null, false, 0, '0', ''. Это универсальная проверка, но она не подходит, если нужно гарантировать, что переменная именно массив.
count() возвращает количество элементов массива. Если переменная не массив, поведение зависит от версии PHP. До PHP 7.2 count(null) возвращает 0. Начиная с 7.2 – выбрасывается предупреждение, если аргумент не является массивом или объектом, реализующим Countable.
Для проверки массива на отсутствие элементов безопаснее использовать is_array($arr) && count($arr) === 0, если важно исключить null и другие типы. empty($arr) проще, но может дать «ложно-положительный» результат, если переменная не инициализирована или не массив.
Если переменная может не существовать, используйте empty($arr) – она не вызовет ошибку. Если переменная гарантированно определена, предпочтительнее count() для однозначности.
Что возвращает count() при проверке пустого массива

Функция count() в PHP возвращает количество элементов в массиве. Если массив пустой, результатом будет 0.
count([])возвращает0count(array())также возвращает0- Если переменная не массив, но содержит
null,count(null)возвращает0начиная с PHP 7.2
До PHP 7.2 вызов count(null) выдавал предупреждение уровня E_WARNING. Рекомендуется использовать оператор is_array() перед вызовом count() для переменных с непредсказуемым типом:
if (is_array($data) && count($data) === 0) {
// массив пуст
}
Для строгой проверки рекомендуется использовать сравнение с 0, а не приведение к логическому типу, чтобы избежать ошибок в условиях:
if (count($arr) === 0) {
// безопасная проверка на пустоту
}
Функция count() работает одинаково с индексными и ассоциативными массивами. Пустой массив любого типа возвращает 0.
Почему isset() не подходит для проверки массива на пустоту
Функция isset() проверяет, установлена ли переменная и не равна ли она NULL. Она не предназначена для определения, содержит ли массив какие-либо элементы. Например, isset($array) вернёт true, даже если массив пустой: $array = [];.
Даже isset($array[0]) не является надёжной проверкой: она только определяет, установлен ли первый элемент массива. Если массив содержит элементы с другими ключами (например, ассоциативные), isset($array[0]) вернёт false, несмотря на наличие данных.
Для корректной проверки используется empty() или count(). Выражение empty($array) вернёт true, если массив пуст или не определён. count($array) === 0 даёт точную численную оценку содержимого.
Использование isset() для проверки массива на пустоту приводит к логическим ошибкам и некорректной обработке данных. Это особенно критично при работе с пользовательским вводом или API-ответами, где структура массива может быть нестандартной.
Как проверить, содержит ли массив только пустые значения
Чтобы определить, содержит ли массив исключительно пустые значения, необходимо проверить каждый элемент с учётом правил функции empty(). Она возвращает true для "", 0, "0", null, false, пустого массива и других «пустых» значений.
Надёжный способ – использовать комбинацию array_filter() и empty(). Пример:
$array = ["", 0, null, false];
$onlyEmpty = empty(array_filter($array, function($value) {
return !empty($value);
}));
var_dump($onlyEmpty); // true
Если array_filter() не находит «непустых» значений, результат – пустой массив, и empty() вернёт true.
Для учёта только строго пустых строк можно изменить условие:
$array = ["", "", " "];
$onlyEmptyStrings = empty(array_filter($array, function($value) {
return trim($value) !== "";
}));
var_dump($onlyEmptyStrings); // false, из-за пробела
Если важна точная типизация, используйте === вместо empty():
$array = [0, false, ""];
$strictEmpty = empty(array_filter($array, function($value) {
return $value !== "" && $value !== 0 && $value !== false && $value !== null;
}));
var_dump($strictEmpty); // true
Проверка вложенных массивов на пустоту
Для проверки вложенных массивов на пустоту в PHP часто используется функция empty(), однако она не всегда подходит для работы с многомерными структурами данных. Чтобы корректно проверить каждый элемент массива, включая вложенные, следует использовать рекурсию или циклы для обхода всех уровней.
Простой пример проверки вложенных массивов с помощью рекурсии:
function checkEmptyNestedArray($array) {
foreach ($array as $key => $value) {
if (is_array($value)) {
if (checkEmptyNestedArray($value)) {
return true; // Вложенный массив пуст
}
} else {
if (!empty($value)) {
return false; // Находится ненулевое значение
}
}
}
return true; // Все элементы массива пусты
}
В этом примере функция checkEmptyNestedArray рекурсивно проверяет каждый элемент массива. Если встречается вложенный массив, происходит его дальнейшая проверка. Функция вернёт true, если все значения массива и вложенных массивов пусты, и false, если хотя бы один элемент не пустой.
Для проверки многомерного массива можно использовать и другие подходы, например, с использованием функции array_walk_recursive(), которая применяет функцию к каждому элементу массива, включая вложенные массивы. Однако данный метод требует дополнительной обработки для проверки значений внутри массива.
Пример с использованием array_walk_recursive():
function checkEmptyUsingArrayWalk($array) {
$isEmpty = true;
array_walk_recursive($array, function($value) use (&$isEmpty) {
if (!empty($value)) {
$isEmpty = false;
}
});
return $isEmpty;
}
Этот способ также позволяет обходить все элементы массива, включая вложенные, и проверять их на пустоту. Если хотя бы один элемент окажется непустым, функция вернёт false.
Обратите внимание, что функции empty() и isset() не всегда дают правильные результаты при работе с многомерными массивами, поскольку они не учитывают структуру массива на всех уровнях. Рекомендуется использовать рекурсивные функции или array_walk_recursive(), чтобы точно определить состояние вложенных массивов.
Как избежать предупреждений при проверке неопределённых массивов
В PHP при попытке обратиться к неопределённому или несуществующему массиву может возникнуть предупреждение. Чтобы избежать таких ошибок, важно правильно проверять наличие массива перед его использованием.
Для предотвращения предупреждений используется конструкция isset() или оператор @. Оператор @ подавляет предупреждения, однако его использование не рекомендуется из-за возможных проблем с производительностью и отладки. Лучше использовать isset(), так как она проверяет, определена ли переменная и не является ли она NULL.
Пример безопасной проверки:
if (isset($array) && is_array($array)) {
// Работаем с массивом
}
В этом примере сначала проверяется, определена ли переменная $array, а затем с помощью is_array() убеждаемся, что она действительно является массивом.
Если необходимо избежать ошибки при обращении к элементу массива, который может быть неопределён, можно воспользоваться isset() в сочетании с проверкой ключа:
if (isset($array['key'])) {
// Работаем с элементом массива
}
Такой подход предотвращает предупреждения, если элемент массива не существует.
Если задача состоит в том, чтобы просто проверить, является ли массив пустым, стоит использовать empty(), которая возвращает true для неопределённых или пустых массивов:
if (!empty($array)) {
// Массив не пуст
}
Вместо использования count() или других методов, empty() позволяет избежать ненужных предупреждений, так как проверяет на пустоту не только сами массивы, но и их элементы.
Как использовать array_filter() для исключения пустых элементов перед проверкой
Функция array_filter() в PHP позволяет отфильтровать массив, исключив элементы, которые считаются «пустыми». По умолчанию эта функция удаляет все элементы, которые оцениваются как false (например, пустые строки, нули, пустые массивы и null).
Когда необходимо проверить массив на пустоту, полезно сначала избавиться от ненужных пустых значений. Например, если в массиве могут быть пустые строки или нули, и вы хотите удостовериться, что массив содержит только значимые элементы, можно использовать array_filter() с пользовательской функцией фильтрации или без нее.
Пример использования array_filter() без указания функции фильтрации:
$array = [1, 0, '', null, 5, 'text'];
$filteredArray = array_filter($array);
var_dump($filteredArray);
В этом примере из массива будут удалены элементы 0, '' и null, оставив только значимые значения: 1, 5, 'text'.
Если необходимо исключить только определенные пустые значения (например, только пустые строки), можно передать функцию фильтрации в array_filter(). Например, для удаления только пустых строк:
$array = [1, '', 'Hello', null, 'world', ''];
$filteredArray = array_filter($array, function($value) {
return $value !== '';
});
var_dump($filteredArray);
Этот подход позволяет более гибко настраивать логику фильтрации. После применения array_filter() можно безопасно проверять массив на пустоту. Например:
if (empty($filteredArray)) {
echo "Массив пуст.";
} else {
echo "Массив не пуст.";
}
Таким образом, использование array_filter() позволяет не только удалить пустые элементы, но и подготовить массив для дальнейшей проверки на пустоту или для других операций.
