Du måste mappa om din array och sedan initiera en array för rättighetsnyckeln... så ändra din while-loop ungefär så här:
$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);
Den här delen av koden $json_response[ $row_array['idCategory'] ]
hjälper till att upprätthålla en unik gruppering av data eftersom den skapar en hash baserad på idCategory. En array kan bara ha en nyckel och eftersom idCategory alltid är unik kan vi använda den som nyckel för att gruppera på. Eftersom vi nu har en hash-baserad array måste vi skapa en ny array som är en "riktig" array för när den konverteras till JSON. Du vill inte använda GROUP BY eller GROUP_CONCAT i den här situationen.