Как проверить, пуст ли массив в PHP? Пять способов, которые должен знать каждый разработчик
Вы когда-нибудь писали PHP-скрипт, который должен обработать массив данных, но вдруг сталкивались с ошибкой «Undefined offset» или «Trying to access array offset on null»? Знакомая ситуация, правда? Проверка массива на пустоту — это одна из тех базовых, но критически важных операций, которую многие начинающие разработчики делают неправильно. В этой статье мы разберём как проверить, пуст ли массив в PHP, и рассмотрим все нюансы: от простого использования empty() до сравнения с []. Готовьте свой любимый редактор кода — будет много практики!
Почему это важно? Реальная история из жизни
Представьте: вы пишете интернет-магазин. Клиент добавляет товары в корзину, оформляет заказ. Ваш код должен проверить, есть ли товары в корзине, прежде чем списывать деньги. Если вы неправильно проверите массив PHP на пустоту, то либо спишете деньги за пустую корзину (и получите гневный звонок от клиента), либо не обработаете заказ вовсе. Именно поэтому вопрос «How to check whether an array is empty using PHP?» набрал тысячи просмотров на Stack Overflow. Давайте разберёмся раз и навсегда.
Способ 1. Функция empty() — самый простой и популярный
Функция empty() в PHP — это швейцарский нож для проверки пустых значений. Она возвращает true, если переменная не существует, равна false, null, пустой строке, 0 или пустому массиву. Для проверки массива на пустоту это идеальный вариант.
<?php
$emptyArray = [];
$filledArray = ['apple', 'banana'];
if (empty($emptyArray)) {
echo 'Массив пуст!'; // Выведет: Массив пуст!
}
if (!empty($filledArray)) {
echo 'Массив содержит элементы: ' . implode(', ', $filledArray);
// Выведет: Массив содержит элементы: apple, banana
}
?>
Важно: empty() не генерирует предупреждение, если переменная не определена. Это безопасно и удобно. Однако помните: если массив содержит элемент со значением 0 или пустую строку '', empty() не считает это «пустым» для всего массива — он проверяет сам массив, а не его элементы.
Способ 2. Функция count() — точный подсчёт элементов
Если вам нужно знать точное количество элементов, используйте count(). Массив считается пустым, если count($array) === 0. Этот метод особенно полезен, когда вы хотите не просто проверить пустоту, но и получить размер массива.
<?php
$users = ['Alice', 'Bob'];
$emptyUsers = [];
if (count($emptyUsers) === 0) {
echo 'Список пользователей пуст.'; // Выведет: Список пользователей пуст.
}
echo 'Количество пользователей: ' . count($users); // Выведет: 2
?>
Тонкий момент: count() сработает даже на несуществующей переменной, но выдаст предупреждение Warning: count(): Parameter must be an array or an object that implements Countable. Чтобы избежать ошибки, комбинируйте с isset() или is_array().
Способ 3. Сравнение с пустым массивом (=== [])
Иногда самый прямолинейный способ — лучший. Вы можете просто сравнить переменную с пустым массивом, используя строгое сравнение ===. Это работает быстро и интуитивно понятно.
<?php
$data = [];
if ($data === []) {
echo 'Массив data пуст.'; // Выведет: Массив data пуст.
}
$config = ['debug' => true];
if ($config !== []) {
echo 'Конфигурация не пуста.';
}
?>
Плюсы: Код читается как обычный английский язык. Минусы: Если переменная не определена, вы получите фатальную ошибку Undefined variable. Поэтому используйте этот метод только для заведомо существующих массивов.
Способ 4. Комбинация isset() + is_array() + count() — для максимальной безопасности
В реальных проектах (особенно при работе с данными из форм или API) вы не всегда уверены, что переменная существует и является массивом. Профессиональный подход — проверить всё сразу.
<?php
// Представим, что $input приходит из $_POST
$input = $_POST['items'] ?? null; // Используем null coalescing operator
if (isset($input) && is_array($input) && count($input) > 0) {
echo 'Массив существует, является массивом и не пуст.';
} else {
echo 'Массив отсутствует, не является массивом или пуст.';
}
?>
Этот шаблон часто используют в фреймворках и CMS. Он защищает от любых неожиданных типов данных: если вдруг пришла строка вместо массива — код не упадёт.
Способ 5. Функция array_filter() — проверка на пустоту с учётом «ложных» значений
Иногда массив формально содержит элементы, но все они «пустые» (например, '', null, false, 0). Если нужно проверить, есть ли в массиве хотя бы одно «значащее» значение, используйте array_filter().
<?php
$mixedArray = ['', null, false, 0, 'hello'];
// array_filter() без callback удаляет все "ложные" значения
$filtered = array_filter($mixedArray);
if (count($filtered) === 0) {
echo 'Массив не содержит значимых элементов.';
} else {
echo 'Остались элементы: ' . implode(', ', $filtered); // Выведет: hello
}
?>
Когда это нужно? Например, при обработке данных из CSV-файла, где могут быть пустые строки. Вы хотите убедиться, что у вас есть хотя бы один заполненный элемент.
Сравнительная таблица: какой способ выбрать?
Чтобы не запутаться, вот краткий чек-лист:
- empty($array) — лучший выбор для 90% случаев. Быстро, безопасно, читаемо.
- count($array) === 0 — когда нужно знать точное количество элементов.
- $array === [] — для простых проверок внутри одной функции, где переменная гарантированно существует.
- isset() + is_array() + count() — для внешних данных (формы, API, базы данных).
- array_filter() — когда нужно игнорировать пустые строки и нули.
Частые ошибки новичков (и как их избежать)
Давайте разберём три типичные ловушки, в которые попадают даже опытные разработ