Avatar ·

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

Всем привет! Я только начал изучать PHP и столкнулся с такой задачей: мне нужно проверить, пустой ли массив, перед тем как выводить его содержимое. Я перепробовал несколько способов, но не уверен, какой из них правильный и надёжный. Вот пример. У меня есть массив товаров в корзине: ```php $cart = []; // или $cart = ['item1', 'item2']; ``` Я хочу сделать проверку: если корзина пуста, показать сообщение "Корзина пуста", иначе — вывести товары. Я пробовал использовать `empty()`: ```php if (empty($cart)) { echo "Корзина пуста"; } ``` Но слышал, что `empty()` может работать не совсем так, как я думаю. Ещё я видел в чужом коде `count($cart) == 0` и `sizeof($cart) == 0`. Какой способ лучше? Учитывает ли он случай, когда массив не объявлен? Или когда в массиве есть ключи, но все значения `null` — это считается пустым массивом? Объясните, пожалуйста, для новичка, как правильно и безопасно проверить, пуст ли массив в 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 оставляйте для случаев, когда нужно просто проверить «истинность» значения в самом широком смысле.