Hi, you can use something like this to prepare variables:
$tableData = collect([
['id' => 1, 'number' => 1, 'letter' => 'A'],
['id' => 2, 'number' => 1, 'letter' => 'B'],
['id' => 3, 'number' => 2, 'letter' => 'B'],
['id' => 4, 'number' => 3, 'letter' => 'B'],
['id' => 5, 'number' => 3, 'letter' => 'A'],
['id' => 6, 'number' => 2, 'letter' => 'A'],
['id' => 7, 'number' => 3, 'letter' => 'C'],
['id' => 8, 'number' => 2, 'letter' => 'C'],
['id' => 9, 'number' => 1, 'letter' => 'C'],
]);
$rows = $tableData->pluck('number')->unique()->sort();
$columns = $tableData->pluck('letter')->unique()->sort();
and then in your view:
<table>
<tr>
<th></th>
@foreach ($columns as $column)
<th>{{ $column }}</th>
@endforeach
</tr>
@foreach ($rows as $row)
<tr>
<th>{{ $row }}</th>
@foreach ($columns as $column)
<td>{{ $tableData->where('number', $row)->where('letter', $column)->value('id') }}</td>
@endforeach
</tr>
@endforeach
</table>