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

Метод flatMap

Метод flatMap применяется к коллекции и принимает в качестве параметра функцию обратного вызова. Эта функция выполняется для каждого элемента коллекции и должна возвращать массив или коллекцию. Результаты всех вызовов затем объединяются в одну коллекцию (то есть происходит выравнивание на один уровень). Метод удобен в ситуациях, когда нужно одновременно преобразовать данные и избавиться от вложенности.

Синтаксис

<?php $collection = collect($array); $res = $collection->flatMap(function ($item) { return $result; }); ?>

Пример

Давайте преобразуем массив чисел, вернув для каждого элемента массив из самого числа и его квадрата:

<?php $collection = collect([1, 2, 3, 4, 5]); $res = $collection->flatMap(function ($item) { return [$item, $item * $item]; }); echo json_encode($res->toArray()); ?>

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

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

Пример

Давайте обработаем коллекцию пользователей и вернём для каждого список его постов:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class User extends Model { protected $fillable = ['name', 'email']; public function posts() { return $this->hasMany(Post::class); } } ?>
<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Post extends Model { protected $fillable = ['title', 'content', 'user_id']; } ?>
<?php namespace AppHttpControllers; use AppModelsUser; use IlluminateSupportCollection; class UserController extends Controller { public function index() { $users = User::with('posts')->get(); $res = $users->flatMap(function ($user) { return $user->posts; }); echo json_encode($res->pluck('title')->toArray()); } } ?>

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

["Post 1", "Post 2", "Post 3", "Post 4", "Post 5"]

Пример

Давайте сгруппируем элементы по категориям и выровняем результат:

<?php $collection = collect([ ['category' => 'a', 'value' => 1], ['category' => 'a', 'value' => 2], ['category' => 'b', 'value' => 3], ['category' => 'b', 'value' => 4], ['category' => 'c', 'value' => 5], ]); $res = $collection->groupBy('category') ->flatMap(function ($group) { return $group->map(function ($item) { return $item['value'] * 2; }); }); echo json_encode($res->values()->toArray()); ?>

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

[2, 4, 6, 8, 10]

Пример

Давайте создадим коллекцию из пар ключ-значение и выровняем её:

<?php $collection = collect([ ['key1' => 'a', 'key2' => 'b'], ['key3' => 'c', 'key4' => 'd'], ]); $res = $collection->flatMap(function ($item) { return array_values($item); }); echo json_encode($res->toArray()); ?>

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

["a", "b", "c", "d"]

Пример

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

<?php $collection = collect([ [1, 2, 3], [4, 5, 6], [7, 8, 9], ]); $res = $collection->flatMap(function ($row) { return $row; }); echo json_encode($res->toArray()); ?>

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

[1, 2, 3, 4, 5, 6, 7, 8, 9]

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

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