从重复的键值对创建php数组

从重复的键值对创建php数组,php,arrays,json,Php,Arrays,Json,我有一个来自后端的json响应,如下所示: [{"studentID":"1","subjectID":"2","marks":65}, {"studentID":"1","subjectID":"3","marks":75}, {"studentID":"2","subjectID":"2","marks":80}, {"studentID":"2","subjectID":"3","marks":82}, {"studentID":"3","subjectID":"2","marks":"8

我有一个来自后端的json响应,如下所示:

[{"studentID":"1","subjectID":"2","marks":65},
{"studentID":"1","subjectID":"3","marks":75},
{"studentID":"2","subjectID":"2","marks":80},
{"studentID":"2","subjectID":"3","marks":82},
{"studentID":"3","subjectID":"2","marks":"82"},
{"studentID":"3","subjectID":"3","marks":"75"}] 
[{"studentID":"1","subjectID":"2","marks":65,"subjectID":"3","marks":75},
{"studentID":"2","subjectID":"2","marks":80,"subjectID":"3","marks":82}
{"studentID":"3","subjectID":"2","marks":"82","subjectID":"3","marks":"75"}]
但我想让它像这样:

[{"studentID":"1","subjectID":"2","marks":65},
{"studentID":"1","subjectID":"3","marks":75},
{"studentID":"2","subjectID":"2","marks":80},
{"studentID":"2","subjectID":"3","marks":82},
{"studentID":"3","subjectID":"2","marks":"82"},
{"studentID":"3","subjectID":"3","marks":"75"}] 
[{"studentID":"1","subjectID":"2","marks":65,"subjectID":"3","marks":75},
{"studentID":"2","subjectID":"2","marks":80,"subjectID":"3","marks":82}
{"studentID":"3","subjectID":"2","marks":"82","subjectID":"3","marks":"75"}]

你知道如何从给定的数组中实现这一点吗?

如上所述,每个对象中不能有重复的键。你需要把它重建成你可以使用的东西。可能是这样的:

$data = json_decode('[{"studentID":"1","subjectID":"2","marks":65},{"studentID":"1","subjectID":"3","marks":75},{"studentID":"2","subjectID":"2","marks":80},{"studentID":"2","subjectID":"3","marks":82},{"studentID":"3","subjectID":"2","marks":"82"},{"studentID":"3","subjectID":"3","marks":"75"}]');

$students = [];

foreach($data as $d) {
    // If entry for student does not exist, create it
    if(!isset($students[$d->studentID])) {
        $students[$d->studentID] = ["subjects" => []];
    }

    // Add data to correct subject
    $students[$d->studentID]['subjects'][$d->subjectID] = [
        "marks" => $d->marks
    ];
}

echo json_encode($students);

// Output is: {"1":{"subjects":{"2":{"marks":65},"3":{"marks":75}}},"2":{"subjects":{"2":{"marks":80},"3":{"marks":82}}},"3":{"subjects":{"2":{"marks":"82"},"3":{"marks":"75"}}}}

然后,您可以使用
$students[studentID]['subjectId]['marks']

在数组上迭代并重新生成数据。顺便说一句,数组中不能有相同的键。这是
javascript
,没有
javascript
标记。你完全正确。我现在就更新php的答案