// Масив масивів
$data = collect([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]);
$flat = $data->collapse();
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
// Колекції у колекції
$tags = collect([
collect(['php', 'laravel']),
collect(['javascript', 'vue']),
collect(['mysql', 'redis']),
]);
$allTags = $tags->collapse();
// ['php', 'laravel', 'javascript', 'vue', 'mysql', 'redis']
// Приклад: об'єднання дозволів користувача з ролей
$user->roles->map(fn($role) => $role->permissions)->collapse();
// Групування, а потім collapse
$orders = Order::all()
->groupBy('user_id')
->map(fn($userOrders) => $userOrders->pluck('items'))
->collapse();
// Відмінність collapse vs flatten
$nested = collect([
[1, [2, [3, 4]]],
[5, [6, [7, 8]]],
]);
$nested->collapse(); // [1, [2, [3, 4]], 5, [6, [7, 8]]]
$nested->flatten(); // [1, 2, 3, 4, 5, 6, 7, 8]
// Об'єднання масивів із кількох моделей
$allEmails = collect([$users, $admins, $moderators])
->map(fn($group) => $group->pluck('email'))
->collapse()
->unique();
// Теги з постів
$uniqueTags = Post::with('tags')->get()
->map(fn($p) => $p->tags)
->collapse()
->unique('id');
// Комбінування результатів пошуку
$results = collect([$localResults, $apiResults])
->collapse()
->sortByDesc('relevance');