
Работа с массивами играет ключевую роль в программировании на PHP. Они позволяют структурировать данные, управлять ими и делать код более понятным. Сегодня рассмотрим две мощные функции: array_map и array_filter. Они помогут вам писать лаконичный и чистый код, избегая излишне сложных циклов.
Что такое array_map и для чего он используется?
array_map — это инструмент, который применяется для модификации всех элементов массива с помощью заданной функции. В результате создаётся новый массив с обновлёнными значениями. Проще говоря, array_map даёт возможность преобразовывать массив без необходимости использовать цикл foreach.
Синтаксис:
array_map(callable $callback, array $array, array ...$arrays): array
Простой пример использования:
Допустим, у нас есть массив чисел, и мы хотим возвести каждое число в квадрат:
$numbers = [1, 2, 3, 4, 5];
$squaredNumbers = array_map(function($num) {
return $num * $num;
}, $numbers);
print_r($squaredNumbers);
Результат:
Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )
Использование array_map
с несколькими массивами
При передаче нескольких массивов в array_map функция последовательно обработает элементы, находящиеся на одинаковых позициях в каждом из них. Это позволяет применять заданную функцию сразу к нескольким массивам одновременно.
$names = ["Анна", "Борис", "Виктор"];
$surnames = ["Иванова", "Петров", "Сидоров"];
$fullNames = array_map(function($name, $surname) {
return "$name $surname";
}, $names, $surnames);
print_r($fullNames);
Результат:
Array ( [0] => Анна Иванова [1] => Борис Петров [2] => Виктор Сидоров )
Что такое array_filter
и зачем он нужен?
Функция array_map предназначена для изменения элементов массива, тогда как array_filter служит для его очистки, отфильтровывая лишние данные на основе заданного условия.
Синтаксис:
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
Фильтрация массива на практике
Допустим, у нас есть массив чисел, и мы хотим оставить только чётные:
$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$evenNumbers = array_filter($numbers, function($num) {
return $num % 2 === 0;
});
print_r($evenNumbers);
Результат:
Array ( [1] => 2 [3] => 4 [5] => 6 [7] => 8 [9] => 10 )
Важно! array_filter
сохраняет исходные ключи массива. Если вам нужно переиндексировать массив, используйте array_values($result)
.
Использование array_filter
без колбэка
Если вызвать array_filter
без второго аргумента, он автоматически удалит все «ложные» значения (false
, 0
, null
, ""
и []
):
$data = ["apple", "", false, "banana", null, 0, "cherry"];
$filteredData = array_filter($data);
print_r($filteredData);
Результат:
Array ( [0] => apple [3] => banana [6] => cherry )
Совместное использование array_map
и array_filter
Эти функции можно комбинировать. Например, сначала отфильтруем массив, а затем преобразуем оставшиеся элементы:
$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$evenSquares = array_map(function($num) {
return $num * $num;
}, array_filter($numbers, function($num) {
return $num % 2 === 0;
}));
print_r($evenSquares);
Результат:
Array ( [1] => 4 [3] => 16 [5] => 36 [7] => 64 [9] => 100 )
Вывод
Функции array_map и array_filter упрощают код, делая его более лаконичным и читаемым. С помощью array_map можно изменять элементы массива, а array_filter позволяет избавляться от ненужных данных. Их совместное использование облегчает обработку массивов, исключая громоздкие циклы. Применяйте эти функции, чтобы писать чистый и оптимизированный код на PHP!