РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
997 of 1392 menu

Метод keyBy

Метод keyBy применяется к коллекции Eloquent или обычной коллекции и возвращает новую коллекцию с ключами, соответствующими значениям указанного поля. В качестве первого параметра передаётся имя поля, либо замыкание, которое определяет ключ для каждого элемента. Если в коллекции встречаются одинаковые ключи, последний элемент перезапишет предыдущий.

Синтаксис

<?php $collection->keyBy($field); $collection->keyBy(function($item, $key) { return $keyValue; }); ?>

Пример

Давайте переиндексируем коллекцию пользователей по полю 'id':

<?php use Illuminate\Support\Collection; $users = collect([ ['id' => 1, 'name' => 'John'], ['id' => 2, 'name' => 'Jane'], ['id' => 3, 'name' => 'Bob'] ]); $res = $users->keyBy('id'); echo $res->toJson(); ?>

Результат выполнения кода:

{"1":{"id":1,"name":"John"},"2":{"id":2,"name":"Jane"},"3":{"id":3,"name":"Bob"}}

Пример

Давайте переиндексируем коллекцию по полю 'email':

<?php use Illuminate\Support\Collection; $users = collect([ ['email' => 'john@mail.com', 'name' => 'John'], ['email' => 'jane@mail.com', 'name' => 'Jane'], ['email' => 'bob@mail.com', 'name' => 'Bob'] ]); $res = $users->keyBy('email'); echo $res->toJson(); ?>

Результат выполнения кода:

{"john@mail.com":{"email":"john@mail.com","name":"John"},"jane@mail.com":{"email":"jane@mail.com","name":"Jane"},"bob@mail.com":{"email":"bob@mail.com","name":"Bob"}}

Пример

Давайте переиндексируем коллекцию с помощью замыкания, которое комбинирует два поля:

<?php use Illuminate\Support\Collection; $users = collect([ ['id' => 1, 'name' => 'John'], ['id' => 2, 'name' => 'Jane'], ['id' => 3, 'name' => 'Bob'] ]); $res = $users->keyBy(function($item, $key) { return 'user_' . $item['id']; }); echo $res->toJson(); ?>

Результат выполнения кода:

{"user_1":{"id":1,"name":"John"},"user_2":{"id":2,"name":"Jane"},"user_3":{"id":3,"name":"Bob"}}

Пример

Рассмотрим ситуацию с дублирующимися ключами - последний элемент перезапишет предыдущий:

<?php use Illuminate\Support\Collection; $users = collect([ ['id' => 1, 'name' => 'John'], ['id' => 2, 'name' => 'Jane'], ['id' => 1, 'name' => 'Bob'] ]); $res = $users->keyBy('id'); echo $res->toJson(); ?>

Результат выполнения кода:

{"1":{"id":1,"name":"Bob"},"2":{"id":2,"name":"Jane"}}

Пример

Применим метод keyBy к результатам запроса Eloquent:

<?php use App\Models\User; use Illuminate\Support\Collection; $users = User::where('status', 'active')->get(); $res = $users->keyBy('id'); foreach ($res as $id => $user) { echo "{$id}: {$user->name}"; } ?>

Результат выполнения кода:

"1: John" "2: Jane" "3: Bob"

Смотрите также

  • метод groupBy,
    который группирует элементы коллекции по указанному ключу
  • метод pluck,
    который извлекает значения указанного поля
  • метод mapWithKeys,
    который преобразует элементы коллекции в новые ключи и значения
  • метод Arr::keyBy,
    который выполняет ту же операцию для массивов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить