Усі три обходять масив і викликають функцію для кожного елемента, але повертають різне:
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', що інколи несподівано.
Жодна з функцій не змінює початковий масив - усі повертають новий.