map() vs transform() - трансформація колекцій
Потрібно змінити кожен елемент колекції?
map() і transform() роблять це, але працюють по-різному.
Різниця:
map()повертає НОВУ колекцію, оригінал залишається без змінtransform()змінює оригінальну колекцію
Що коли використовувати:
map()- коли початкові дані потрібні пізнішеtransform()- коли треба зекономити пам'ять на великих колекціях
Порада: map() дозволяє повністю змінювати структуру, transform() зберігає ключі.
// map() - створює нову колекцію
$users = User::all();
$names = $users->map(function ($user) {
return strtoupper($user->name);
});
// transform() - змінює оригінал
$users = User::all();
$users->transform(function ($user) {
$user->name = strtoupper($user->name);
return $user;
});
// map() з короткими функціями
$prices = collect([100, 200, 300]);
$withTax = $prices->map(fn($p) => $p * 1.2);
// Повна зміна структури
$formatted = $users->map(fn($user) => [
'id' => $user->id,
'label' => "{$user->name} ({$user->email})"
]);
// mapWithKeys - власні ключі
$users->mapWithKeys(fn($user) =>
[$user->email => $user->name]
);