Как проверить, пуст ли массив в PHP? Простые и правильные способы
Основные способы проверки пустого массива в PHP
Давайте разберём три самых популярных подхода и выясним, какой из них действительно правильный в разных ситуациях.
1. empty() — удобно, но с нюансами
Функция empty() проверяет, является ли переменная «пустой». Для массива это означает:
- Массив не существует (не объявлен) →
true - Массив существует и пуст (
[]) →true - Массив содержит хотя бы один элемент →
false
Пример:
$arr = [];
var_dump(empty($arr)); // bool(true)
$arr = ['apple'];
var_dump(empty($arr)); // bool(false)
// Если переменная не объявлена — тоже true, без ошибки
var_dump(empty($undefinedArray)); // bool(true)
Плюс: не вызывает предупреждение, если переменная не существует.
Минус: empty() считает пустыми также null, false, 0, '', '0', пустой объект SimpleXMLElement. Если вы случайно передадите не массив, а, скажем, число 0 — empty() вернёт true, что может быть неожиданностью.
2. count($array) === 0 — явно и надёжно
Функция count() возвращает количество элементов в массиве. Если массив пуст — вернёт 0.
$arr = [];
if (count($arr) === 0) {
echo 'Массив пуст';
}
$arr = ['a', 'b'];
echo count($arr); // 2
Важно: count() работает только с существующими массивами. Если переменная не определена, PHP выдаст предупреждение Warning: count(): Parameter must be an array or an object that implements Countable.
Поэтому всегда проверяйте, что переменная существует, с помощью isset() или is_array():
if (isset($arr) && count($arr) === 0) {
// массив существует и пуст
}
Плюс: прозрачная логика, не путается с другими типами данных.
Минус: требует дополнительной проверки на существование переменной.
3. sizeof() — синоним count()
sizeof() — это просто псевдоним count(). Работает абсолютно так же. Рекомендуется использовать count(), так как это стандартный и более читаемый вариант.
Какой способ выбрать?
- Если вы точно уверены, что переменная существует и является массивом — используйте
empty(). Это коротко и безопасно (не вызовет ошибку при отсутствии переменной). - Если вам нужна строгая проверка именно на пустой массив (и вы не хотите путать с
0,nullи т.д.) — используйтеcount($array) === 0в паре сis_array()илиisset(). - Для кода, где массив гарантированно существует (например, возвращён функцией), можно писать просто:
if (!$array) { ... }. PHP автоматически приводит пустой массив кfalse.
Полный пример для реальной задачи
function getCartItems(): array {
// допустим, возвращает массив из БД или сессии
return []; // или ['item1', 'item2']
}
$cart = getCartItems();
// Вариант 1: через empty() — безопасно, даже если $cart не определён
if (empty($cart)) {
echo "Корзина пуста";
} else {
echo "В корзине " . count($cart) . " товаров";
}
// Вариант 2: строгая проверка
if (is_array($cart) && count($cart) === 0) {
echo "Корзина пуста";
}
Вывод: для большинства случаев в реальных проектах используйте empty($array) — это самый простой и надёжный способ. Если нужна максимальная строгость — комбинируйте is_array() и count().
Альтернативный подход: приведение к bool и сравнение с []
Ещё один способ, который иногда встречается в коде — это прямое сравнение с пустым массивом или использование приведения типа:
$arr = [];
// Способ 1: сравнение с []
if ($arr === []) {
echo 'Массив пуст';
}
// Способ 2: приведение к boolean
if ((bool)$arr === false) {
echo 'Массив пуст';
}
// Способ 3: неявное приведение в условии (самый короткий)
if (!$arr) {
echo 'Массив пуст';
}
Важно:
$arr === []— строгое сравнение. Работает только если переменная точно является массивом. Если это, например,null— сравнение вернётfalse, и вы не поймёте, что переменная не определена.!$arr— самый короткий способ, но он сработает и дляnull,0,false, пустой строки. Если вы уверены, что в переменной всегда массив — это нормально.
Лично я рекомендую использовать empty() или count() с проверкой типа, так как они более читаемы и явно указывают на намерение проверить именно массив. А !$arr оставляйте для случаев, когда нужно просто проверить «истинность» значения в самом широком смысле.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги