U moet uw array opnieuw toewijzen en vervolgens een array initialiseren voor de rechtensleutel ... dus verander uw while-lus ongeveer als volgt:
$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);
Dit deel van de code $json_response[ $row_array['idCategory'] ]
helpt bij het behouden van een unieke groepering van de gegevens omdat het een hash creëert op basis van de idCategory. Een array kan maar één sleutel hebben en aangezien idCategory altijd uniek is, kunnen we die gebruiken als de sleutel om op te groeperen. Omdat we nu een op hash gebaseerde array hebben, moeten we een nieuwe array maken die een 'echte' array is voor wanneer het wordt geconverteerd naar JSON. In deze situatie wilt u GROUP BY of GROUP_CONCAT niet gebruiken.