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

Метод mapWithKeys

Метод mapWithKeys применяется к коллекции и возвращает новую коллекцию, где каждый элемент преобразуется в пару ключ-значение с помощью переданной функции обратного вызова. Первым параметром передаётся замыкание, которое принимает каждый элемент коллекции и должно вернуть ассоциативный массив с одним элементом (ключ => значение). Если ключи повторяются, то последнее значение перезапишет предыдущее.

Синтаксис

<?php $collection->mapWithKeys($callback); ?>

Пример

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

<?php use Illuminate\Support\Collection; $users = collect([ ['id' => 1, 'name' => 'John'], ['id' => 2, 'name' => 'Jane'], ['id' => 3, 'name' => 'Bob'] ]); $res = $users->mapWithKeys(function ($user) { return [$user['id'] => $user['name']]; }); print_r($res->all()); ?>

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

[ 1 => "John", 2 => "Jane", 3 => "Bob" ]

Пример

Давайте создадим ассоциативный массив, где ключом будет строка, а значением - объект модели:

<?php use Illuminate\Support\Collection; use App\Models\Article; $articles = Article::where('status', 'published') ->limit(3) ->get(); $res = $articles->mapWithKeys(function ($article) { return ['article_' . $article->id => $article]; }); foreach ($res as $key => $value) { echo $key . ": " . $value->title . "\n"; } ?>

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

"article_1: First article" "article_2: Second article" "article_3: Third article"

Пример

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

<?php use Illuminate\Support\Collection; $numbers = collect([1, 2, 3, 4, 5]); $res = $numbers->mapWithKeys(function ($number) { return [$number => $number * $number]; }); print_r($res->all()); ?>

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

[ 1 => 1, 2 => 4, 3 => 9, 4 => 16, 5 => 25 ]

Пример

Давайте обработаем коллекцию товаров, создав ассоциативный массив с ключом в виде slug и значением в виде цены:

<?php use Illuminate\Support\Collection; use Illuminate\Support\Str; $products = collect([ ['name' => 'Laptop', 'price' => 999, 'slug' => 'laptop-pro'], ['name' => 'Mouse', 'price' => 25, 'slug' => 'wireless-mouse'], ['name' => 'Keyboard', 'price' => 75, 'slug' => 'mechanical-keyboard'] ]); $res = $products->mapWithKeys(function ($product) { return [$product['slug'] => $product['price']]; }); print_r($res->all()); ?>

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

[ "laptop-pro" => 999, "wireless-mouse" => 25, "mechanical-keyboard" => 75 ]

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

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