Laravel: коллекции, маппинг по ключу

от автора

в
Время чтения: 2 мин.

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


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Сколько будет 3 + 10?