Обе функции работают с массивами, но выполняют принципиально разные задачи:
Назначение: Применяет 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]
Назначение: Фильтрует элементы массива с помощью callback-функции, возвращая массив только с элементами, прошедшими проверку.
Ключевые особенности:
<?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()
— для выбора элементов по условию