В Laravel коллекции предоставляют удобные методы для работы с массивами данных. Маппинг коллекций по ключу позволяет преобразовывать данные, извлекать значения или создавать новые структуры на основе ключей. Рассмотрим основные способы маппинга коллекций по ключу.
Пример коллекции
Допустим, у нас есть коллекция с данными:
$collection = collect([
['id' => 1, 'name' => 'John', 'age' => 25],
['id' => 2, 'name' => 'Jane', 'age' => 30],
['id' => 3, 'name' => 'Doe', 'age' => 35],
]);
1. Извлечение значений по ключу (pluck
)
Если нужно извлечь значения определённого ключа (например, name
), используйте метод pluck
:
$names = $collection->pluck('name');
// Результат: ['John', 'Jane', 'Doe']
Если нужно извлечь значения с указанием ключа для индексации:
$namesById = $collection->pluck('name', 'id');
// Результат: [1 => 'John', 2 => 'Jane', 3 => 'Doe']
2. Преобразование значений по ключу (map
)
Метод map
позволяет трансформировать каждый элемент коллекции. Например, увеличим возраст (age
) на 5 лет:
$updatedCollection = $collection->map(function ($item) {
$item['age'] += 5; // Увеличиваем возраст на 5
return $item;
});
// Результат:
// [
// ['id' => 1, 'name' => 'John', 'age' => 30],
// ['id' => 2, 'name' => 'Jane', 'age' => 35],
// ['id' => 3, 'name' => 'Doe', 'age' => 40],
// ]
3. Добавление нового ключа на основе существующего
С помощью map
можно добавить новый ключ в каждый элемент коллекции. Например, добавим ключ is_adult
, который будет зависеть от возраста:
$updatedCollection = $collection->map(function ($item) {
$item['is_adult'] = $item['age'] >= 18; // Добавляем новый ключ
return $item;
});
// Результат:
// [
// ['id' => 1, 'name' => 'John', 'age' => 25, 'is_adult' => true],
// ['id' => 2, 'name' => 'Jane', 'age' => 30, 'is_adult' => true],
// ['id' => 3, 'name' => 'Doe', 'age' => 35, 'is_adult' => true],
// ]
4. Индексация коллекции по ключу (keyBy
)
Если нужно переиндексировать коллекцию по определённому ключу (например, id
), используйте метод keyBy
:
$reindexedCollection = $collection->keyBy('id');
// Результат:
// [
// 1 => ['id' => 1, 'name' => 'John', 'age' => 25],
// 2 => ['id' => 2, 'name' => 'Jane', 'age' => 30],
// 3 => ['id' => 3, 'name' => 'Doe', 'age' => 35],
// ]
5. Создание новой коллекции с ключами и значениями (mapWithKeys
)
Метод mapWithKeys
позволяет создать новую коллекцию, где ключи и значения формируются на основе исходных данных. Например, создадим коллекцию, где ключом будет id
, а значением — name
:
$keyValueCollection = $collection->mapWithKeys(function ($item) {
return [$item['id'] => $item['name']];
});
// Результат:
// [
// 1 => 'John',
// 2 => 'Jane',
// 3 => 'Doe',
// ]
6. Фильтрация по ключу (filter
)
Если нужно отфильтровать коллекцию по значению определённого ключа, используйте метод filter
. Например, оставим только пользователей старше 30 лет:
$filteredCollection = $collection->filter(function ($item) {
return $item['age'] > 30;
});
// Результат:
// [
// ['id' => 3, 'name' => 'Doe', 'age' => 35],
// ]
Итог
pluck
— извлечение значений по ключу.map
— преобразование элементов коллекции.keyBy
— индексация коллекции по ключу.mapWithKeys
— создание новой коллекции с ключами и значениями.filter
— фильтрация по значению ключа.
Эти методы позволяют гибко работать с данными в коллекциях Laravel и легко выполнять маппинг по ключам.
Добавить комментарий