У меня есть массив с этой структурой:
$grades = array( 'Grade 1' => array( 'title' => 'Grade 1 Class', 'students' => 5, 'teacher' => 'Smith', ), 'Grade 2' => array( 'title' => 'Grade 2 Class', 'students' => 5, 'teacher' => 'Smith', ), 'Grade 3' => array( 'title' =>'Grade 3 Class', 'students' => 8, 'teacher' => 'John', ), 'Grade 4' => array( 'title' =>'Grade 4 Class', 'students' => 8, 'teacher' => 'John', ), 'Grade 5' => array( 'title' =>'Grade 5 Class', 'students' => 8, 'teacher' => 'John', ), 'Grade 6' => array( 'title' =>'Grade 6 Class', 'students' => 8, 'teacher' => 'John', ), 'Grade 7' => array( 'title' =>'Grade 7 Class', 'students' => 9, 'teacher' => 'John', ), 'Grade 8' => array( 'title' =>'Grade 8 Class', 'students' => 4, 'teacher' => 'Tina', ), 'Grade 9' => array( 'title' =>'Grade 9 Class', 'students' => 4, 'teacher' => 'Tina', ) );
И я хочу сгруппировать их по количеству учеников и учителей.
Например, вышеупомянутый массив должен выводить это:
Grade 1 Class - Grade 2 Class 5 Smith // group 1 Grade 3 Class - Grade 6 Class 8 John // group 2 Grade 7 Class 9 John // group 3 Grade 8 Class - Grade 9 Class 4 Tina // group 4
поэтому, чтобы быть в 1 группе, они должны иметь как одинаковое количество учеников, так и одного учителя.
Следующие группы основаны на количестве студентов (в нем также есть некоторые ошибки):
$newArray = array(); foreach ($grades as $key => $value) { $newArray[$value['students']][$key] = $value; } foreach ($newArray as $student => $data) { $gradeFirst = key($data); // Check there are multiple grade or single grade if(count($data) > 1){ $lastGrade = end($data); echo $data[$gradeFirst]['title'].' - '.$lastGrade['title'] .' '. $student; } else{ echo $data[$gradeFirst]['title'].' '. $student; } echo "\n"; }
как я могу убедиться, что как ученик, так и преподаватель используются для группировки?
Примечание: порядок важен, поэтому, например, не будет группы для класса 1, класс 3, класс 4, если класс 2 отличается. В этом случае это будет:
Grade 1 Class // group Grade 2 Class // breaks the group Grade 3 Class - Grade 4 Class // rest of the group