【问题标题】:foreach for discinct value and multiple result on the same lineforeach 在同一行上获取不同的值和多个结果
【发布时间】:2015-09-05 15:57:08
【问题描述】:


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

学生 1 -> 1 年级 -> 1 年级 -> 3 年级
学生 2 -> 1 年级 -> 2 年级 -> 3 年级

我的 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 来查看结果,基本上 foreach studentID 给我所有与他们相关的成绩并为每个学生重复...
但是我得到多个结果,相同的 StudentID 然后是另一个 studentID,比如这个:

学生 1 -> 1 年级
学生 1 -> 2 年级
学生 1 -> 3 年级
学生 2 -> 1 年级
学生 2 -> 2 年级
学生 2 -> 3 年级

有什么建议吗??

【问题讨论】:

  • 你需要做什么?数组?你想要的数组格式是什么?也许可以是$array[student][grade],它包含信息?或者$array[student] = array("Grade 1", "Grade 2", "Grade 3")?这取决于您的需要有很大的不同

标签: php mysql foreach


【解决方案1】:

这样做:

$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";
}

另一种解决方案是,两次循环数组并将每个 studentId 作为数组键将所有成绩分配给 studentID,例如:

$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>";
}

【讨论】:

    猜你喜欢
    • 2014-06-14
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    相关资源
    最近更新 更多