<?php
$collection = collect([
[
'category_id' => 1,
'question_id' => 1,
'option_id' => 2,
'title' => 'Do you wear glasses?',
'answer' => 'no'
],
[
'category_id' => 1,
'question_id' => 2,
'option_id' => 3,
'title' => 'Your hobbies ?',
'answer' => 'movies'
],
[
'category_id' => 1,
'question_id' => 4,
'option_id' => 8,
'title' => 'what is your status?',
'answer' => 'single'
],
[
'category_id' => 1,
'question_id' => 2,
'option_id' => 1,
'title' => 'Your hobbies ?',
'answer' => 'travel'
],
]);
var_export(
$collection
->groupBy(fn($item) => $item['category_id'] . '_' . $item['question_id'])
->map(fn($group) => collect($group->first())->put('answer', $group->pluck('answer')->implode(', ')))
->values()
->toArray()
);