Проверка массива на пустоту в PHP

Раздел: PHP -> Базовые операции PHP

Проверка пустого массива: обзор подходов

При работе с массивами в PHP часто требуется определить, содержит ли массив элементы или он пуст. Это необходимо для корректной обработки данных, избегания ошибок при итерациях и построения логики приложений. Разные способы имеют свои особенности, связанные с типом переменной, её существованием и производительностью.

Наиболее эффективное и прямое решение - строгое сравнение массива с пустым массивом через оператор ===:

$array = [];
if ($array === []) {
    echo 'Массив пуст';
} else {
    echo 'Массив содержит элементы';
}

Php empty array (проверка пустого массива в php)

Массив пуст

Этот способ работает только если переменная определена и является массивом. Если переменная не существует, возникнет фатальная ошибка. Для безопасной проверки следует предварительно убедиться в существовании переменной с помощью isset() или использовать empty().

Как проверить пустоту массива без риска ошибки существования переменной?

Использование функции empty() - самый распространённый и безопасный метод:

$array = [];
if (empty($array)) {
    echo 'Переменная пуста (массив не содержит элементов)';
} else {
    echo 'В переменной есть данные';
}
Переменная пуста (массив не содержит элементов)

Функция empty() возвращает true не только для пустых массивов, но и для значений null, false, 0, пустой строки. Если необходимо точно удостовериться, что переменная является именно массивом, а не другим типом, стоит комбинировать проверки.

Как проверить, что массив пуст, используя подсчёт элементов?

Функция count() возвращает количество элементов в массиве. Сравнение результата с нулём даёт чёткий ответ:

$array = [];
if (count($array) === 0) {
    echo 'Массив пуст';
} else {
    echo 'Массив содержит ' . count($array) . ' элементов';
}
Массив пуст

Как проверить пустой массив с помощью функции sizeof?

sizeof() - алиас count(), работает идентично:

$empty = [];
if (sizeof($empty) === 0) {
    echo 'Массив пуст';
}
Массив пуст

Можно ли использовать приведение к bool для проверки пустоты массива?

Пустой массив в логическом контексте преобразуется в false. Это позволяет использовать короткую запись:

$array = [];
if (!$array) {
    echo 'Массив пуст';
}
Массив пуст

Однако такой подход не отличает пустой массив от других ложных значений (например, 0 или null), и при неопределённой переменной вызовет предупреждение.

Как проверить, что массив пуст, но при этом все его элементы (если есть) тоже пусты?

Функция array_filter() без callback удаляет из массива все значения, которые приводятся к false. Если отфильтрованный массив пуст, значит исходный содержал только «пустые» элементы:

$data = [0, null, '', false];
$filtered = array_filter($data);
if (empty($filtered)) {
    echo 'В массиве нет значений, считающихся непустыми';
} else {
    echo 'Найдены непустые значения';
}
В массиве нет значений, считающихся непустыми

Этот вариант полезен при проверке форм, где требуется узнать, заполнил ли пользователь хотя бы одно поле.

Как проверить многомерный массив на полную пустоту (все внутренние массивы тоже пусты)?

Потребуется рекурсивная проверка. Пример:

function isArrayEmptyRecursive(array $array): bool {
    foreach ($array as $item) {
        if (is_array($item)) {
            if (!isArrayEmptyRecursive($item)) {
                return false;
            }
        } else {
            return false;
        }
    }
    return true;
}

$multi = [[], [], []];
var_dump(isArrayEmptyRecursive($multi)); // true
$multi2 = [[], [1], []];
var_dump(isArrayEmptyRecursive($multi2)); // false
bool(true)
bool(false)

Типичные проблемы и их решения

Проблема 1: Использование count($array) для неопределённой переменной выдаёт предупреждение Warning: count(): Parameter must be an array or an object that implements Countable.
Решение: Предварительно проверять существование и тип переменной: if (isset($array) && is_array($array) && count($array) === 0).

Проблема 2: Применение empty() к переменной, которая не определена, не вызывает ошибку, но может дать ложное срабатывание, если переменная существует, но содержит, например, 0.
Решение: Комбинировать isset() и is_array() перед empty() или использовать строгое сравнение.

Проблема 3: Путаница между «пустой массив» и «массив, содержащий только пустые строки».
Решение: Уточнять задачу. Для проверки наличия любых ключей используйте count(), для проверки значимых данных - array_filter().

Проблема 4: Использование !$array для неопределённой переменной вызывает ошибку уровня Notice.
Решение: Применять @ подавление ошибок (не рекомендуется) или использовать empty().

Расширенные примеры проверки пустых массивов

Пример 1: Проверка массива после удаления элементов

Пример
$users = ['Alice', 'Bob', 'Charlie'];
unset($users[1], $users[2]);
if (count($users) === 0) {
    echo 'Массив пользователей пуст';
} else {
    echo 'Остались пользователи: ' . implode(', ', $users);
}
Массив пользователей пуст

Пример 2: Проверка массива, полученного из базы данных (PDO)

Пример
$stmt = $pdo->query('SELECT * FROM articles WHERE status = 0');
$rows = $stmt->fetchAll();
if ($rows === []) {
    echo 'Нет статей с нулевым статусом';
} else {
    echo 'Найдено статей: ' . count($rows);
}
Нет статей с нулевым статусом

Пример 3: Комбинированная проверка с isset и is_array

Пример
$data = $_POST['items'] ?? null;
if (isset($data) && is_array($data) && empty($data)) {
    echo 'Поле items передано, но массив пуст';
} elseif (!isset($data)) {
    echo 'Поле items отсутствует в запросе';
} else {
    echo 'Получены данные';
}
Поле items передано, но массив пуст

Пример 4: Проверка многомерного массива с рекурсией (все уровни пусты)

Пример
function isFullyEmpty($array) {
    if (!is_array($array) || empty($array)) {
        return true;
    }
    foreach ($array as $value) {
        if (is_array($value)) {
            if (!isFullyEmpty($value)) {
                return false;
            }
        } else {
            return false;
        }
    }
    return true;
}

$tree = [
    'level1' => [],
    'level2' => ['sub' => []]
];
var_dump(isFullyEmpty($tree)); // true

$tree2 = [
    'level1' => ['value' => 'something']
];
var_dump(isFullyEmpty($tree2)); // false
bool(true)
bool(false)

Пример 5: Использование array_filter для проверки на наличие заполненных полей формы

Пример
$formData = ['name' => '', 'email' => 'user@example.com', 'comment' => ''];
$filled = array_filter($formData, function($value) {
    return $value !== '' && $value !== null;
});
if (empty($filled)) {
    echo 'Форма не содержит заполненных полей';
} else {
    echo 'Заполнены поля: ' . implode(', ', array_keys($filled));
}
Заполнены поля: email

Пример 6: Быстрое определение пустоты с помощью array_keys

Пример
$array = [];
if (array_keys($array) === []) {
    echo 'Массив не имеет ключей (пуст)';
}
Массив не имеет ключей (пуст)

Этот способ избыточен, но демонстрирует, что можно проверить и через ключи.

Пример 7: Проверка пустого массива с учётом типа (строгая типизация)

Пример
declare(strict_types=1);

function isArrayEmpty(array $array): bool {
    return $array === [];
}

$empty = [];
var_dump(isArrayEmpty($empty)); // true
$notEmpty = [1];
var_dump(isArrayEmpty($notEmpty)); // false
bool(true)
bool(false)

Проверка пустого массива в PHP - comments

En
Php empty array (php)