У меня есть 3 таблицы, после присоединения имени и вывода роли с этим
$encoded = array();
while($res = mysqli_fetch_assoc($result)) {
echo json_encode($res);
}
Я получил это
{"student_id":"1","student_name":"john","score_id":"1","score_type":"E","score_name":"England"}
{"student_id":"1","student_name":"john","score_id":"2","score_type":"B","score_name":"Brazil"}
Теперь я изо всех сил стараюсь превратить их в формат, который мне нужен, клиентский сайт должен иметь это
//json
[{
"student_id":"1",
"student_name":"john",
"scores": [{
"score_id":"1",
"score_type":"E",
"score_name":"England"
},{
"score_id":"2",
"score_type":"B",
"score_name":"Brazil"
}]
}]
Задача состоит в том, что он дублировал строку с одним и тем же человеком.
Обработайте выход, используя Array $encoded
и после его создания вы можете распечатать его с помощью JSON.
В этом решении массив будет проиндексирован student_id
и оценками score_id
. В случае студента это необходимо, в случае баллов рекомендуется:
$encoded = array();
while($res = mysqli_fetch_assoc($result)) {
// Student details
$encoded[$res['student_id']] = array(
'student_id' => $res['student_id'],
'student_name' => $res['student_name'],
);
// Student score details
$encoded[$res['student_id']]['scores'][$res['score_id']] = array(
'score_id' => $res['score_id'],
'score_type' => $res['score_type'],
'score_name' => $res['score_name'],
);
}
echo json_encode($encoded);
Примечание. Это общий ответ, так как я не знаю точной структуры ваших данных в $ res.
Пожалуйста, найдите приведенный ниже код, чтобы получить формат json, как указано в вашем вопросе
$students = [];
$sampleData = [
[
"student_id"=>"1",
"student_name"=>"john",
"score_id"=>"1",
"score_type"=>"E",
"score_name"=>"England",
],
[
"student_id"=>"1",
"student_name"=>"john",
"score_id"=>"2",
"score_type"=>"B",
"score_name"=>"Brazil",
],
];
foreach ($sampleData as $res) {
//if student not found by id then continue
if (empty($res['student_id'])) {
continue;
}
$student = [];
//get the already exists student to add scores
if(!empty($students[$res['student_id']])) {
$student = $students[$res['student_id']];
}
//prepare the student array
$student['student_id'] = $res['student_id'];
$student['student_name'] = $res['student_name'];
$student['scores'][]['score_id'] = $res['score_id'];
$student['scores'][]['score_type'] = $res['score_type'];
$student['scores'][]['score_name'] = $res['score_name'];
$students[$res['student_id']] = $student;
}
echo json_encode(array_values($students));
надеюсь это поможет
Вы можете найти рабочий пример здесь
$arr = $students[$res['contact_id']] ?? [];
Я пока не использую php 7.