Mysql
 sql >> Database >  >> RDS >> Mysql

Creazione di array all'interno di array da dati MySQL a json

Devi rimappare il tuo array e quindi inizializzare un array per la chiave dei diritti... quindi, cambia il tuo ciclo while in questo modo:

$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);

Questa parte del codice $json_response[ $row_array['idCategory'] ] aiuta a mantenere un raggruppamento univoco dei dati perché crea un hash basato su idCategory. Un array può avere solo una chiave e poiché idCategory è sempre univoco, possiamo usarlo come chiave per il raggruppamento. Quindi, poiché ora abbiamo un array basato su hash, dobbiamo creare un nuovo array che sia un array "reale" per quando viene convertito in JSON. Non si desidera utilizzare GROUP BY o GROUP_CONCAT in questa situazione.