Чем array_map() отличается от array_filter()?php-28

Обе функции работают с массивами, но выполняют принципиально разные задачи:

array_map — Трансформация данных

Назначение: Применяет callback-функцию ко всем элементам массива и возвращает новый массив с преобразованными значениями.

Ключевые особенности:

  • Возвращает массив той же длины, что и исходный
  • Изменяет значения, но не структуру массива
  • Может работать с несколькими массивами одновременно
<?php
$numbers = [1, 2, 3];
$squared = array_map(fn($n) => $n * $n, $numbers);
// Результат: [1, 4, 9]

Пример с несколькими массивами:

$add = function($a, $b) { return $a + $b; };
$result = array_map($add, [1, 2], [4, 5]);
// Результат: [5, 7]

array_filter — Селекция данных

Назначение: Фильтрует элементы массива с помощью callback-функции, возвращая массив только с элементами, прошедшими проверку.

Ключевые особенности:

  • Возвращает массив меньшей или равной длины
  • Сохраняет оригинальные значения, но может изменить ключи
  • Без callback-функции удаляет "ложные" значения (false, 0, '', null)
<?php
$numbers = [1, 0, 3, '', 5];
$filtered = array_filter($numbers);
// Результат: [0 => 1, 2 => 3, 4 => 5]

Пример с callback:

$even = array_filter([1, 2, 3, 4], fn($n) => $n % 2 === 0);
// Результат: [1 => 2, 3 => 4]

Сравнительная таблица

Критерий array_map() array_filter()
Возвращаемый результат Новые значения Подмножество оригинального массива
Длина массива Сохраняется Может уменьшиться
Ключи массива Сохраняются Сохраняются (но могут сброситься при array_values())
Аргументы callback Текущий элемент Текущий элемент + ключ (опционально)

Комбинированный пример

<?php
$data = [1, 2, 3, 4, 5];

// Сначала фильтруем, затем преобразуем
$result = array_map(
    fn($n) => $n * 10,
    array_filter($data, fn($n) => $n > 2)
);
// Результат: [30, 40, 50]

Резюмируем:

  • array_map() — для изменения всех элементов массива
  • array_filter() — для выбора элементов по условию
  • Обе функции не изменяют исходный массив (создают новый)
  • Могут эффективно комбинироваться для сложной обработки данных