why not just...
$students = collect([
['teacher' => 'Teacher 1', 'class' => 'Class A', 'name' => 'Student 1', 'age' => 10],
['teacher' => 'Teacher 1', 'class' => 'Class A', 'name' => 'Student 2', 'age' => 11],
['teacher' => 'Teacher 1', 'class' => 'Class A', 'name' => 'Student 3', 'age' => 12],
['teacher' => 'Teacher 1', 'class' => 'Class B', 'name' => 'Student 1', 'age' => 12],
['teacher' => 'Teacher 1', 'class' => 'Class B', 'name' => 'Student 2', 'age' => 13],
['teacher' => 'Teacher 1', 'class' => 'Class B', 'name' => 'Student 3', 'age' => 9],
['teacher' => 'Teacher 2', 'class' => 'Class C', 'name' => 'Student 1', 'age' => 6],
['teacher' => 'Teacher 2', 'class' => 'Class C', 'name' => 'Student 2', 'age' => 7],
])
->filter( fn($class) => $class['age'] > 10)
->groupBy(['teacher', 'class']);