создать массив php из дублирующих пар ключ-значение - PullRequest
0 голосов
/ 13 мая 2018

У меня есть ответ 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"}]

Есть идеи, как этого добиться с помощью данного массива?

1 Ответ

0 голосов
/ 13 мая 2018

Как уже упоминалось, вы не можете иметь дубликаты ключей в каждом объекте.Вам нужно перестроить его так, чтобы вы могли использовать его.Примерно так:

$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]['subjects'][subjectId]['marks']

...