Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Статті за тегом «Трансформація даних»

Статті, новини, туторіали та переклади від учасників спільноти

No results.
transformaciia-danix Очистити фільтр
Tips 21 вересня 2026

zip() і combine() - зшивання колекцій

Маєте два окремі масиви - заголовки й значення? Або назви колонок і рядок CSV?

Зшивати їх циклом по індексу не потрібно.

Різниця:

  • zip() - склеює елементи попарно, повертає колекцію пар
  • combine() - бере першу колекцію як ключі, другу як значення

Де корисно:

  • Парсинг CSV: рядок заголовків + рядки даних
  • Зіставлення результатів двох запитів
  • Побудова асоціативних структур на льоту

Порада: zip() не обрізає до найкоротшої колекції - відсутні значення стають null.

// combine() - ключі + значення
$headers = collect(['name', 'email', 'age']);
$row = ['John', 'john@ex.com', 30];

$user = $headers->combine($row);
// ['name' => 'John', 'email' => 'john@ex.com', 'age' => 30]

// zip() - попарне склеювання
$names = collect(['John', 'Jane']);
$ages = [30, 25];

$pairs = $names->zip($ages);
// [['John', 30], ['Jane', 25]]

// zip() з нерівною довжиною - null у хвості
collect([1, 2, 3])->zip([10, 20]);
// [[1, 10], [2, 20], [3, null]]

// Кілька колекцій одночасно
$names->zip($ages, $emails);
// [['John', 30, 'john@ex.com'], ...]
// Парсинг CSV одним ланцюжком
$lines = collect(file('users.csv'));
$headers = str_getcsv($lines->shift());

$users = $lines->map(fn ($line) =>
  collect($headers)->combine(str_getcsv($line))
);
// $users[0]['email'] - асоціативний доступ

// Зіставлення двох запитів у мапу
$map = Order::pluck('id')
  ->combine(Order::pluck('total'));
// [1 => 250.00, 2 => 130.50]
Tips 14 вересня 2026

collapse() - Сплющення вкладених колекцій

Маєте масив масивів? Потрібен один суцільний?

collapse() сплющує лише один рівень.

Приклади використання:

  • Об'єднання кількох колекцій
  • Сплющення згрупованих даних
  • Комбінування результатів запитів

Відмінність від flatten():

  • collapse() - один рівень
  • flatten() - рекурсивно всі рівні

Порада: використовуйте flatten() для глибоко вкладених структур.

// Масив масивів
$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');

Матеріали за темою «Трансформація даних»: усе, що ми писали про це українською. Нижче - суміжні теми, якщо шукаєте ширше.

Зараз опубліковано 2 матеріали від 1 автора. Останній матеріал - 21 вересня 2026.