You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel PHP构建指定结构的对象数组响应问题

修正Laravel代码以生成期望的学生成绩数组结构

问题分析

你的代码存在以下关键问题,导致输出结构不符合预期:

  • 未遍历查询到的学生列表($usersData),没有为每个学生单独生成科目成绩数据
  • $subjectsArray未在每个学生的循环内初始化,会导致不同学生的科目数据互相累加
  • 最终数组的组织逻辑错误,没有按照「每个学生为一个对象,包含姓名和对应科目列表」的结构构建

修正后的代码

// 查询符合条件的学生列表
$usersData = User::where('user_id', 2)
    ->where("stud_class", $exam_details->exam_class_id)
    ->where("XXXX", $exam_details->exam_branch_id)
    ->get();

// 初始化最终的学生数组
$studentsArray = [];

// 遍历每个学生
foreach ($usersData as $student) {
    // 每个学生单独初始化科目数组,避免数据污染
    $subjectsArray = [];

    // 遍历每个科目,计算该学生的对应成绩
    foreach ($exam_data as $subject) {
        $att_exams = MODEL::where('XXXXX', $subject->subject_id)
            ->where('XXXX', $student->id) // 关联当前循环的学生ID
            ->first();

        if ($att_exams) {
            $marks = MODEL::where('XXXX', $att_exams->attended_exams_id)->get();
            $right = 0;
            $wrong = 0;
            $total_marks = $marks->sum('XXXX');
            
            $total_negative_marks = $wrong * $subject->negative_marks;
            $subjectsArray[] = [
                "subject" => $subject->subject_name,
                "marks_" => $total_marks - $total_negative_marks,
            ];
        } else {
            $subjectsArray[] = [
                "subject" => $subject->subject_name,
                "marks_" => 0,
            ];
        }
    }

    // 将当前学生的信息和科目成绩加入最终数组
    $studentsArray[] = [
        "student" => $student->name, // 替换为实际存储学生姓名的字段名
        "subjects" => $subjectsArray
    ];
}

return $studentsArray;

关键调整说明

  1. 遍历学生列表:新增对$usersData的循环,确保每个学生都生成独立的成绩数据
  2. 重置科目数组:在每个学生的循环内初始化$subjectsArray,避免不同学生的科目数据混淆
  3. 修正结构赋值:每个学生项以["student" => "...", "subjects" => [...]]的格式加入$studentsArray,完全匹配你期望的JSON结构
  4. 修正学生ID引用:将原代码中的$user->id改为$student->id,确保关联当前循环的学生

内容的提问来源于stack exchange,提问作者Swapnil Mane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 20:25:53