В 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 и легко выполнять маппинг по ключам.


Добавить комментарий