Musíte přemapovat své pole a poté inicializovat pole pro klíč práv... takže změňte smyčku while nějak takto:
$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);
Tato část kódu $json_response[ $row_array['idCategory'] ]
pomáhá udržovat jedinečné seskupení dat, protože vytváří hash na základě idCategory. Pole může mít pouze jeden klíč, a protože idCategory je vždy jedinečné, můžeme jej použít jako klíč pro seskupování. Poté, protože nyní máme pole založené na hash, musíme vytvořit nové pole, které je „skutečným“ polem pro když je převeden na JSON. V této situaci nechcete používat GROUP BY nebo GROUP_CONCAT.