1

I am trying to create an array of objects in laravel php. I have achieved this so far.

When I return the array I get the response which I have added a image for clarity.

I get this output

enter image description here

I want to create a response like this...

[
    {
        "student": "Jaime Thomas",
        "subjects": [
            {
                "subject": "Physics",
                "marks_": 0
            },
            {
                "subject": "Chemistry",
                "marks_": 0
            }
        ]
    },
    {
        "student": "Jaime Dey",
        "subjects": [
            {
                "subject": "Physics",
                "marks_": 0
            },
            {
                "subject": "Chemistry",
                "marks_": 0
            }
        ]
    }
]

  $usersData = User::where('user_id', 2)->where("stud_class", $exam_details->exam_class_id)->where("XXXX", $exam_details->exam_branch_id)->get();
            foreach ($exam_data as  $subject) {
                $att_exams =  MODEL::where('XXXXX', $subject->subject_id)
                    ->where('XXXX', $user->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[] = array(
                        "subject" => $subject->subject_name,
                        "marks_" => $total_marks - $total_negative_marks,
                    );
                } else {
                    $subjectsArray[] = array(
                        "subject" => $subject->subject_name,
                        "marks_" => 0,
                    );
                }
            }
            $studentsArray["subjects"] = array($subjectsArray);
        }
        return $studentsArray;
2
  • 1
    Try return [$studentsArray]; Commented Dec 29, 2022 at 11:43
  • @MuhammadTashfeen sir I want to add subjects array into the main studentArray. {"student" : "abc","subjects : [ {}, {} ]} like this sir... Commented Dec 29, 2022 at 13:12

1 Answer 1

1

You can try the below code:

$studentsArray = [];
        $usersData = User::where('user_id', 2)->where("stud_class", $exam_details->exam_class_id)->where("XXXX", $exam_details->exam_branch_id)->get(['name', 'id']);
        foreach ($usersData as $user) {
            $subjectsArray = [];
            foreach ($exam_data as  $subject) {
                $att_exams =  MODEL::where('XXXXX', $subject->subject_id)
                    ->where('XXXX', $user->id)
                    ->first();
                if ($att_exams) {
                    $marks =  MODEL::where('XXXX', $att_exams->attended_exams_id)->get();
                    $right = 0;
                    $wrong = 0;
                    $total_marks = $marks->sum('XXXX');
                    foreach ($marks as $mark) {
                        if ($mark->XXX== 0) {
                            $wrong++;
                        } else {
                            $right++;
                        }
                    }
                    $total_negative_marks = $wrong * $subject->negative_marks;
                    $subjectsArray[] = [
                        "subject" => $subject->subject_name,
                        "marks_" => $total_marks - $total_negative_marks,
                    ];
                } else {
                    $subjectsArray[] = array(
                        "subject" => $subject->subject_name,
                        "marks_" => 0,
                    );
                }
            }
            $studentsArray[] = [
                "student" => $user->name,
                "subjects" => $subjectsArray
            ];
        }
        return $studentsArray;
Sign up to request clarification or add additional context in comments.

3 Comments

sir. I tried your code but it is not returning the array which I want. Please check I have updated the question.
I have updated the answer, check it out.
Reaching out to get an update if this eventually works for you

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.