Трябва да преназначите масива си и след това да инициализирате масив за ключа за права... така че променете своя цикъл while нещо подобно:
$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);
Тази част от кода $json_response[ $row_array['idCategory'] ]
помага да се поддържа уникално групиране на данните, защото създава хеш въз основа на idCategory. Масивът може да има само един ключ и тъй като idCategory винаги е уникален, можем да го използваме като ключ за групиране. След това, тъй като сега имаме масив, базиран на хеш, трябва да създадем нов масив, който е „истински“ масив за когато се преобразува в JSON. Не искате да използвате GROUP BY или GROUP_CONCAT в тази ситуация.