Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Чим array_map, array_filter і array_reduce відрізняються одне від одного?

Усі три обходять масив і викликають функцію для кожного елемента, але повертають різне:

  • array_map - новий масив тієї ж довжини, кожен елемент перетворено.
  • array_filter - лише ті елементи, для яких функція повернула true. Ключі зберігаються.
  • array_reduce - одне значення, накопичене з усіх елементів.
$prices = [100, 250, 40];

array_map(fn (int $p): int => $p * 2, $prices);          // [200, 500, 80]
array_filter($prices, fn (int $p): bool => $p > 50);      // [0 => 100, 1 => 250]
array_reduce($prices, fn (int $sum, int $p): int => $sum + $p, 0); // 390

Пастки, про які питають:

  • Порядок аргументів різний: у array_map спершу функція, у array_filter - масив. Плутають постійно.
  • Після array_filter ключі «дірчасті» ([0, 2, 5]), і json_encode перетворить такий масив на об'єкт. Допомагає array_values().
  • array_filter без функції прибирає всі «порожні» значення - разом із 0 і '0', що інколи несподівано.

Жодна з функцій не змінює початковий масив - усі повертають новий.

Докладніше в документації: array_map

1

Перевір себе

20 випадкових питань за спробу, після завершення - розбір кожної помилки

Схожі питання