Bạn cần remap mảng của mình và sau đó khởi tạo một mảng cho khóa quyền ... vì vậy, hãy thay đổi vòng lặp while của bạn như sau:
$json_response = array();
while($row = $result->fetch_assoc()) {
if (!isset($json_response[ $row['idCategory'] ])) {
$json_response[ $row['idCategory'] ] = [
'idCategory' => $row['idCategory'],
'nameCategory' => $row['nameCategory'],
'rights' => [],
];
}
$json_response[ $row['idCategory'] ]['rights'][] = [
'idRight' => $row['rid'],
'name' => $row['rname'],
'price' => $row['price'],
'image' => $row['rimg']
];
}
// We want the final result to ignore the keys and to create a JSON array not a JSON object
$data = [];
foreach ($json_response as $element) {
$data[] = $element;
}
echo json_encode($data);
Phần này của mã $json_response[ $row_array['idCategory'] ]
giúp duy trì một nhóm dữ liệu duy nhất vì nó tạo ra một hàm băm dựa trên idCategory. Một mảng chỉ có thể có một khóa và vì idCategory luôn là duy nhất nên chúng ta có thể sử dụng nó làm khóa để nhóm trên. Vì vậy, vì bây giờ chúng ta có một mảng dựa trên băm, chúng ta phải tạo một mảng mới là mảng 'thực' cho khi nó được chuyển đổi thành JSON. Bạn không muốn sử dụng GROUP BY hoặc GROUP_CONCAT trong trường hợp này.