Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Criando array dentro de array de dados mysql para json


Você precisa remapear sua matriz e inicializar uma matriz para a chave de direitos ... então, altere seu loop while para algo assim:
$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 do código $json_response[ $row_array['idCategory'] ] ajuda a manter um agrupamento exclusivo dos dados porque cria um hash com base no idCategory. Um array pode ter apenas uma chave e como idCategory é sempre único, podemos usá-lo como chave para agrupamento. quando for convertido para JSON. Você não deseja usar GROUP BY ou GROUP_CONCAT nesta situação.