Mysql
 sql >> Base de données >  >> RDS >> Mysql

Création d'un tableau à l'intérieur d'un tableau à partir de données mysql vers json

Vous devez remapper votre tableau, puis initialiser un tableau pour la clé de droits... alors, changez votre boucle while comme ceci :

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

Cette partie du code $json_response[ $row_array['idCategory'] ] aide à maintenir un regroupement unique des données car il crée un hachage basé sur idCategory. Un tableau ne peut avoir qu'une seule clé et puisque idCategory est toujours unique, nous pouvons l'utiliser comme clé pour le regroupement. Ensuite, comme nous avons maintenant un tableau basé sur le hachage, nous devons créer un nouveau tableau qui est un "vrai" tableau pour lorsqu'il est converti en JSON. Vous ne souhaitez pas utiliser GROUP BY ou GROUP_CONCAT dans cette situation.