Массив пуст в PHP? Разбираем все способы проверки

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Как проверить, пуст ли массив в PHP? Полное руководство с примерами

Привет, коллега-разработчик! Если ты когда-нибудь писал код на PHP, то наверняка сталкивался с ситуацией, когда нужно понять: есть ли в массиве хоть что-то, или он пуст, как карман студента после сессии. Эта задача кажется тривиальной, но она таит в себе несколько подводных камней. Особенно для новичков, которые могут случайно "уронить" скрипт из-за неверной проверки.

Сегодня мы разберем все популярные способы проверки пустого массива в PHP, от самых простых до профессиональных. Ты узнаешь, чем empty() отличается от isset(), почему count() может быть опасен, и как написать идеальный код. Поехали!

Почему это важно? Типичные ошибки новичков

Представь: ты получаешь данные от пользователя (например, список товаров в корзине). Если массив пуст — нужно показать сообщение "Корзина пуста". Если не пуст — вывести товары. Казалось бы, простая логика. Но вот что часто пишут начинающие:

// Ошибка №1: сравнение с false
if ($cart == false) {
    echo "Корзина пуста";
}

// Ошибка №2: неявное приведение типов
if ($cart) {
    // Этот код выполнится, если массив не пуст
}

Вроде бы работает? Да, но только в простых случаях. А что если в массиве есть ключи, но все значения — null или пустые строки? Или если переменная вообще не определена? Тут и начинаются баги. Чтобы их избежать, давай разберем проверку пустого массива PHP по-настоящему.

Способ №1: Функция empty() — самый популярный

Это первое, что приходит на ум. Функция empty() в PHP возвращает true, если переменная пуста. Для массива это означает: массив не существует, равен null, или не содержит элементов.

<?php
$emptyArray = [];
$nonEmptyArray = ['apple', 'banana'];

var_dump(empty($emptyArray));    // true
var_dump(empty($nonEmptyArray)); // false
?>

Плюсы: коротко, читаемо, работает для неопределенных переменных (не выдает warning).

Минусы: empty() считает пустыми также 0, '0', '', false, null и пустой объект SimpleXMLElement. Если твой массив содержит, например, один элемент со значением 0 — empty() скажет, что он пуст. А это не всегда то, что нужно.

<?php
$trickyArray = [0];
var_dump(empty($trickyArray)); // true! А элемент-то есть
?>

Вывод: используй empty() только когда ты точно уверен, что в массиве не будет "ложных" значений (0, пустая строка и т.д.). Для большинства задач с формами и пользовательским вводом — отличный вариант.

Способ №2: Функция count() — точный подсчет

Второй по популярности способ — проверка массива на пустоту через count(). Эта функция возвращает количество элементов в массиве.

<?php
$array1 = [];
$array2 = ['a' => 1, 'b' => 2];

if (count($array1) === 0) {
    echo "Массив пуст";
}

if (count($array2) > 0) {
    echo "Массив не пуст, в нем " . count($array2) . " элемента";
}
?>

Плюсы: абсолютно точный результат. Если count() вернул 0 — в массиве нет элементов. Никаких неожиданностей с ложными значениями.

Минусы: для очень больших массивов count() может быть медленнее, чем empty() (хотя разница обычно незначительна). Также нужно быть осторожным: если переменная не определена, count() выдаст warning. Используй проверку isset() или @count() (но подавление ошибок — плохая практика).

Лучшая практика: комбинируй с isset():

<?php
if (isset($array) && count($array) > 0) {
    // Массив существует и не пуст
}
?>

Способ №3: Сравнение с пустым массивом (=== [])

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

<?php
$array = [];

if ($array === []) {
    echo "Да, это пустой массив";
}

// Если переменная не определена — будет ошибка
if ($undefinedVar === []) { // Notice: Undefined variable
    // ...
}
?>

Плюсы: очень наглядно, легко читается.

Минусы: не сработает для неопределенных переменных. Также не различает null и пустой массив (а это разные вещи).

Способ №4: Использование isset() — проверка существования

Многие путают isset() и empty(). isset() проверяет, определена ли переменная и не равна ли она null. Для массива это не совсем то, что нужно, но может быть полезно в комбинации.

<?php
$array = [];

var_dump(isset($array)); // true — переменная определена
var_dump(isset($undefined)); // false

// Но isset не проверяет, пуст ли массив!
if (isset($array) && $array !== []) {
    echo "Массив существует и не пуст";
}
?>

Когда использовать: когда тебе нужно убедиться, что переменная вообще существует, а потом уже проверить ее содержимое.

Способ №5: Функция array_filter() — продвинутый уровень

Иногда нужно проверить не просто наличие элементов, а то, есть ли в массиве "реальные" значения (не пустые строки, не null, не false). Тут на помощь приходит array_filter().

<?php
$array = ['', null, false, 0, 'hello'];

// array_filter без callback удалит все "ложные" значения
$filtered = array_filter($array);

if (count($filtered) === 0) {
    echo "В массиве нет значимых элементов";
} else {
    echo "Есть хотя бы один непустой элемент";
}
// Выведет: "Есть хотя бы один непустой элемент" (осталось 'hello')
?>

Плюсы: мощный инструмент для фильтрации. Позволяет проверить, есть ли в массиве данные, которые реально можно использовать.

Минусы: создает новый массив (немного ресурсов). Для простой проверки пустоты — избыточно.

Блоги

Рекомендаций по книгам