Как удалить пустые элементы из массива в PHP: полное руководство

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

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

Начать курс

Введение: почему пустые элементы в массиве — это головная боль

Каждый PHP-разработчик рано или поздно сталкивается с ситуацией, когда массив, который должен содержать только полезные данные, оказывается забит "мусором": пустыми строками, значениями null, false или нулями. Это особенно часто происходит при обработке данных из форм, CSV-файлов, API-ответов или при работе с пользовательским вводом.

Представьте: вы получили массив тегов от пользователя, а половина из них — пустые строки. Или вы импортировали данные из Excel, и в некоторых ячейках оказался только пробел. Если не очистить такой массив, результаты могут быть плачевными: некорректные запросы к базе данных, сломанная логика фильтрации, лишние записи в отчетах.

В этой статье мы разберем как удалить пустые элементы из массива в PHP максимально эффективно. Вы узнаете не только базовые методы, но и продвинутые техники: рекурсивную очистку, работу с многомерными массивами и тонкие настройки фильтрации. Поехали!

1. Базовый метод: array_filter() — ваш главный инструмент

Самый популярный и лаконичный способ удалить пустые элементы из массива PHP — это функция array_filter(). По умолчанию она удаляет все элементы, которые в логическом контексте считаются "ложными" (false):

  • "" (пустая строка)
  • null
  • false
  • 0 и "0"
  • [] (пустой массив)
<?php
$data = ['apple', '', 'banana', null, 'cherry', false, 0];
$clean = array_filter($data);
print_r($clean);
// Результат: Array ( [0] => apple [2] => banana [4] => cherry )
?>

Обратите внимание: ключи массива сохраняются. Это может быть проблемой, если вам нужна последовательная нумерация. Решение — обернуть результат в array_values():

<?php
$clean = array_values(array_filter($data));
print_r($clean);
// Результат: Array ( [0] => apple [1] => banana [2] => cherry )
?>

1.1. Тонкая настройка: как удалить только пустые строки, но оставить нули

Что если вам нужно удалить пустые строки из массива PHP, но оставить числа, включая ноль? array_filter() без параметров удалит и нули тоже. Используем callback-функцию:

<?php
$data = ['apple', '', 'banana', 0, 'cherry', '   '];
$clean = array_filter($data, function($value) {
    return $value !== '' && $value !== null;
});
print_r($clean);
// Результат: Array ( [0] => apple [2] => banana [3] => 0 [4] => cherry [5] =>    )
?>

Но пробелы остались! Чтобы удалить и их, используйте trim():

<?php
$clean = array_filter($data, function($value) {
    return trim($value) !== '' && $value !== null;
});
print_r($clean);
// Результат: Array ( [0] => apple [2] => banana [3] => 0 [4] => cherry )
?>

2. Продвинутые методы: array_diff() и array_unique()

Иногда нужно удалить пустые строки из массива PHP или конкретные значения, не прибегая к callback. На помощь приходит array_diff() — функция сравнения массивов:

<?php
$data = ['apple', '', 'banana', null, 'cherry', false];
// Создаем массив "стоп-значений"
$remove = ['', null, false];
$clean = array_diff($data, $remove);
print_r($clean);
// Результат: Array ( [0] => apple [2] => banana [4] => cherry )
?>

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

2.1. Удаление дубликатов пустых значений

Если в массиве есть несколько одинаковых пустых элементов, array_filter() удалит их все. Но если вам нужно избавиться только от дубликатов пустых строк, комбинируйте array_unique() и array_filter():

<?php
$data = ['apple', '', 'banana', '', 'cherry', ''];
$clean = array_unique(array_filter($data));
print_r($clean);
// Результат: Array ( [0] => apple [2] => banana [4] => cherry )
?>

3. Рекурсивная очистка: удаление пустых элементов в многомерных массивах

Работа с вложенными данными — настоящий вызов. Как очистить массив PHP от пустых значений, если он состоит из подмассивов? Стандартный array_filter() не рекурсивен. Придется написать свою функцию:

<?php
function removeEmptyRecursive($array) {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            // Рекурсивно очищаем подмассив
            $array[$key] = removeEmptyRecursive($value);
            // Если после очистки подмассив пуст — удаляем его
            if (empty($array[$key])) {
                unset($array[$key]);
            }
        } else {
            // Удаляем пустые скалярные значения
            if ($value === '' || $value === null || $value === false) {
                unset($array[$key]);
            }
        }
    }
    return $array;
}

$nestedData = [
    'fruits' => ['apple', '', 'banana'],
    'numbers' => [1, null, 3],
    'empty' => []
];
$clean = removeEmptyRecursive($nestedData);
print_r($clean);
// Результат: Array ( [fruits] => Array ( [0] => apple [2] => banana ) [numbers] => Array ( [0] => 1 [2] => 3 ) )
?>

Эта функция рекурсивно обходит все уровни вложенности, удаляя пустые строки, null, false и пустые массивы. Идеально для работы с JSON-данными или конфигурациями.

4. Практические кейсы: где это реально нужно

4.1. Обработка данных из формы

Представьте, что пользователь отправляет список своих навыков через форму с полем textarea. Вы разбиваете строку по запятым, но получаете массив с пустыми элементами из-за лишних пробелов или запятых в конце:

<?php
$input = "PHP, , JavaScript, ,, Python";
$skills = explode(',', $input);
$skills                

Блоги

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