Foreach在同一行中查找不同的值和多个结果


foreach for discinct value and multiple result on the same line


简而言之:
我想为学生和成绩创建一个列表。当我得到我的sql时,我为同一个学生得到了很多分数。我要做的是:

学生1 ->一年级->一年级->三年级
学生二->一年级->二年级->三年级

我的sql拉所有的记录在数据库中这是伟大的,但我怎么能让它像这样显示?

SQL非常标准

$query_getGradesTr1 = "SELECT gradeID, studentID, grades.examID, grade FROM grades, exams WHERE exams.trackID=1 AND grades.examID=exams.examID";
$getGradesTr1 = mysql_query($query_getGradesTr1, $Site) or die(mysql_error());
$row_getGradesTr1 = mysql_fetch_assoc($getGradesTr1);
$totalRows_getGradesTr1 = mysql_num_rows($getGradesTr1);

我想过使用foreach来查看结果,基本上是每个学生,我给我所有与他们相关的成绩,并重复每个学生…
但我得到多个结果与相同的studententid然后另一个studententid,像这样:

学生1 ->一年级
学生1 ->二年级
学生1 ->三年级
学生2 ->一年级
学生2 ->二年级
学生2 ->三年级

有什么建议吗? ?

这样做:

$current_student = NULL;
foreach($totalRows_getGradesTr1 as $each) {
    // Check here is student does not matches to previous student
    if($each->studentID !== $current_student) {
        // If not matches then print, else ignore
        echo "$each->studentID";
    }
    // Assign to check again in next loop
    $current_student = $each->studentID;
    // Always print grade
    echo "-> $each->gradeID";
}

另一个解决方案是,对数组进行两次循环,并将每个studententid作为数组键,将所有成绩分配给studententid,如:

$students_grades = array();
foreach($totalRows_getGradesTr1 as $each) {
    if(!isset($student_grades[$each->studentID]) {
        $student_grades[$each->studentID] = array();
    }
    $student_grades[$each->studentID][] = $each->gradeID;
}
// Then nested loop here and print records
foreach($student_grades as $studentID => $grades) {
    echo "$studentID -&gt; " . implode('-&gt;', $grades) . "'r<br>";
}