Функция `array_filter()` — мощный инструмент в арсенале PHP-разработчика для работы с массивами. Она позволяет элегантно "просеивать" массив, оставляя в нем только те элементы, которые удовлетворяют заданному условию. Это избавляет от необходимости писать циклы `foreach` с вложенными `if`, делая код более читаемым и лаконичным.
В этом уроке мы изучим `array_filter()` от А до Я. Начнем с простейшего использования для удаления "пустых" значений, затем перейдем к фильтрации с помощью callback-функций, разберем работу с анонимными функциями и специальными флагами для фильтрации по ключам. Вас ждут задания на написание кода, поиск ошибок и предсказание результата, которые помогут закрепить теорию на практике.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Простейшая фильтрация: удаление "пустых" значений
Самое базовое использование `array_filter()` — вызов без второго аргумента (callback-функции). В этом режиме она удаляет все элементы, которые приводятся к `false`. Заполните пропуски, чтобы отфильтровать массив `$data` от таких значений.
<?php
$data = [1, 'hello', 0, '', false, 'world', null, '0'];
// Удаляем все значения, которые эквивалентны false
$filtered_data = input1S(input2S);
print_r($filtered_data);
?>Фильтрация с помощью callback-функции
Теперь добавим условие. У нас есть массив чисел, и нужно оставить только те, что больше 10. Для этого в `array_filter` передается вторым аргументом callback-функция, которая должна возвращать `true` для подходящих элементов. Заполните пропуски для создания такой фильтрации.
<?php
$numbers = [5, 12, 8, 25, 10, 15];
$large_numbers = array_filter($numbers, function($number) {
return $number input1S 10;
});
print_r($large_numbers);
?>Что останется в массиве?
В этом коде используется короткая стрелочная функция для фильтрации массива строк. Фильтр должен оставить только те строки, которые содержат подстроку 'pro'. Внимательно проанализируйте код и выберите, какой результат будет выведен на экран.
<?php
$items = ['processor', 'ram', 'monitor', 'projector'];
$pro_items = array_filter(
$items,
fn($item) => str_contains($item, 'pro')
);
print_r($pro_items);
?>Найдите и исправьте ошибку в callback-функции
Программист хотел отфильтровать массив, оставив только непустые строки. Однако он допустил ошибку в условии внутри callback-функции, из-за чего результат получился неверным. Найдите и исправьте ошибочную строку.
<?php$strings = ["first", "", "third", ""]; $non_empty = array_filter($strings, function($value) { return $value = '';}); print_r($non_empty);?>Соберите скрипт для фильтрации активных пользователей
Из перемешанных строк кода соберите рабочий PHP-скрипт. Он должен объявить массив пользователей (каждый — ассоциативный массив), а затем отфильтровать его, оставив только тех, у кого ключ 'isActive' имеет значение `true`.
$users = [['name' => 'John', 'isActive' => true], ['name' => 'Pete', 'isActive' => false]];<?phpprint_r($active_users);$active_users = array_filter($users, fn($user) => $user['isActive']);?>$inactive_users = array_filter($users, fn($user) => !$user['isActive']);echo "Done";Фильтрация по ключу с помощью флага
Функция `array_filter` может фильтровать массив не только по значениям, но и по ключам. Для этого ей нужно передать специальный флаг в качестве третьего аргумента. Выберите правильный флаг из банка, чтобы оставить только те элементы, чьи ключи являются строками.
<?php
$data = ['name' => 'Alice', 1 => 'ignored', 'age' => 25, 2 => 'also ignored'];
$filtered_by_key = array_filter(
$data,
'is_string',
input1S
);
print_r($filtered_by_key);
?>Сколько элементов пройдет фильтрацию?
В этом примере используется флаг `ARRAY_FILTER_USE_BOTH`, который передает в callback-функцию и значение, и ключ. Условие — значение элемента должно быть вдвое больше его ключа. Посчитайте, сколько элементов останется в массиве после такой фильтрации, и впишите число.
<?php
$numbers = [1, 2, 6, 6, 8];
$result = array_filter(
$numbers,
fn($value, $key) => $value == $key * 2,
ARRAY_FILTER_USE_BOTH
);
echo count($result);
?>