Руководство по array_map и array_filter: секреты эффективной работы с массивами в PHP

Работа с массивами играет ключевую роль в программировании на 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!

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Сайт создал Романенко Артем