Метод map
Метод map применяется к коллекции и возвращает новую коллекцию,
содержащую результаты применения callback-функции к каждому элементу
исходной коллекции. Callback принимает текущий элемент и его ключ
в качестве параметров, а возвращает преобразованное значение.
Синтаксис
<?php
collect($items)->map($callback);
?>
В качестве параметра передаётся callback-функция:
<?php
$res = collect([1, 2, 3, 4, 5])
->map(function ($item, $key) {
return $item * 2;
});
?>
Callback может использовать стрелочную функцию:
<?php
$res = collect([1, 2, 3, 4, 5])
->map(fn ($item) => $item * 2);
?>
Метод не изменяет исходную коллекцию, а возвращает новую.
Пример
Давайте преобразуем массив чисел, умножив каждое число на 2:
<?php
use Illuminate\Support\Collection;
$arr = [1, 2, 3, 4, 5];
$res = collect($arr)->map(function ($item) {
return $item * 2;
});
echo $res;
?>
Результат выполнения кода:
[2, 4, 6, 8, 10]
Метод возвращает новую коллекцию, исходный массив не изменился.
Пример
Давайте преобразуем массив строк в массив их длин:
<?php
use Illuminate\Support\Collection;
$arr = ['abcde', 'article', 'user', 'category'];
$res = collect($arr)->map(function ($item) {
return strlen($item);
});
echo $res;
?>
Результат выполнения кода:
[5, 7, 4, 8]
Callback-функция преобразует каждый элемент в его длину.
Пример
Давайте преобразуем массив чисел в массив строк с префиксом:
<?php
use Illuminate\Support\Collection;
$arr = [1, 2, 3, 4, 5];
$res = collect($arr)->map(function ($item) {
return 'Number: ' . $item;
});
echo $res;
?>
Результат выполнения кода:
["Number: 1", "Number: 2", "Number: 3", "Number: 4", "Number: 5"]
Callback может возвращать значение любого типа, который затем попадает в результирующую коллекцию.
Пример
Давайте преобразуем ассоциативный массив, используя ключи:
<?php
use Illuminate\Support\Collection;
$arr = [
'first' => 'abcde',
'second' => 'article',
'third' => 'user'
];
$res = collect($arr)->map(function ($item, $key) {
return $key . ' - ' . $item;
});
echo $res;
?>
Результат выполнения кода:
["first - abcde", "second - article", "third - user"]
Вторым параметром callback получает ключ элемента, что позволяет использовать его в преобразовании.
Пример
Давайте преобразуем коллекцию моделей Eloquent, извлекая определённые поля:
<?php
namespace App\Http\Controllers;
use App\Models\User;
class UserController extends Controller
{
public function index()
{
$users = User::all();
$res = $users->map(function ($user) {
return $user->name . ' (' . $user->email . ')';
});
return $res;
}
}
?>
Результат выполнения кода:
[
"John Doe (john@example.com)",
"Jane Smith (jane@example.com)",
"Bob Johnson (bob@example.com)"
]
Метод map идеально подходит для трансформации данных
перед их выводом или дальнейшей обработкой.
Смотрите также
-
метод
flatMap,
который преобразует и разворачивает коллекцию -
метод
mapWithKeys,
который преобразует коллекцию в ассоциативный массив -
метод
filter,
который фильтрует коллекцию по условию -
метод
pluck,
который извлекает значения определённого поля