从重复的键值对创建php数组
我有一个来自后端的json响应,如下所示:从重复的键值对创建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
[{"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的答案