配列を再マップしてから、rightsキーの配列を初期化する必要があります...したがって、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に基づいてハッシュを作成するため、データの一意のグループ化を維持するのに役立ちます。配列は1つのキーしか持つことができず、idCategoryは常に一意であるため、それをグループ化のキーとして使用できます。次に、ハッシュベースの配列があるため、「実際の」配列である新しい配列を作成する必要があります。 JSONに変換されるとき。この状況では、GROUPBYまたはGROUP_CONCATを使用しないでください。