sql >> Base de Datos >  >> RDS >> Mysql

Creando una matriz dentro de una matriz desde datos mysql a json

Necesita reasignar su matriz y luego inicializar una matriz para la clave correcta... entonces, cambie su ciclo while algo como esto:

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

Esta parte del código $json_response[ $row_array['idCategory'] ] ayuda a mantener una agrupación única de los datos porque crea un hash basado en idCategory. Una matriz solo puede tener una clave y, dado que idCategory siempre es única, podemos usarla como clave para agrupar. Entonces, como ahora tenemos una matriz basada en hash, tenemos que crear una nueva matriz que sea una matriz 'real' para cuando se convierte a JSON. No desea utilizar GROUP BY o GROUP_CONCAT en esta situación.