Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erstellen eines Arrays innerhalb eines Arrays aus MySQL-Daten in JSON

Sie müssen Ihr Array neu zuordnen und dann ein Array für den Rechteschlüssel initialisieren ... also ändern Sie Ihre While-Schleife etwa so:

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

Dieser Teil des Codes $json_response[ $row_array['idCategory'] ] hilft, eine eindeutige Gruppierung der Daten beizubehalten, da es einen Hash basierend auf der idCategory erstellt. Ein Array kann nur einen Schlüssel haben und da idCategory immer eindeutig ist, können wir diesen als Schlüssel für die Gruppierung verwenden. Da wir jetzt ein Hash-basiertes Array haben, müssen wir ein neues Array erstellen, das ein „echtes“ Array für ist wenn es in JSON konvertiert wird. Sie möchten in dieser Situation nicht GROUP BY oder GROUP_CONCAT verwenden.