sql >> データベース >  >> RDS >> Mysql

PHPMySQLを使用してネストされたJSONを作成する

    サブアレイデータを効率的にグループ化するには、一時キーを実装する必要があります。 cityId cityNamesであるため、-でグループ化するのに適した値です。 将来意図的に複製される可能性がありますが、cityId データベーステーブルで意図せずに重複してはいけません。

    新しいcityIdごとに が検出されると、条件付きのisset() callは、新しい/完全なデータセットを保存するか、データをサブアレイに追加するだけかを決定します。

    array_slice()を呼び出しています 不要な構文/コード膨張を削減するためです。

    すべての行を繰り返し処理した後、$resultのインデックスを再作成できます。 配列、runBasedOnCity内にネストします 、statusを追加します 要素。

    PRETTY_PRINTを使用してデモを表示します 読みやすくするためですが、実際のコードでは、パラメーターを削除する必要があります。また、一言アドバイスです。読みやすさを向上させるために、変数名は簡潔にしてください。

    コード:(デモ

    $resultset = [
        ["id" => "1", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "2", "distance" => "10k", "status" => "1"],
        ["id" => "2", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "1", "distance" => "5k", "status" => "1"],
        ["id" => "3", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "5", "distance" => "3k", "status" => "0"],
        ["id" => "4", "cityId" => "2", "cityName" => "Chennai", "runId" => "1", "distance" => "5k", "status" => "1"],
        ["id" => "5", "cityId" => "2", "cityName" => "Chennai", "runId" => "2", "distance" => "10k", "status" => "1"],
        ["id" => "6", "cityId" => "2", "cityName" => "Chennai", "runId" => "4", "distance" => "15k", "status" => "1"]
    ];
    
    foreach ($resultset as $row) {
        if (!isset($result[$row["cityId"]])) {
            $result[$row["cityId"]] = array("id" => $row["id"], "cityId" => $row["cityId"], $row["cityName"] => array(array_slice($row,-3)));
        } else {
            $result[$row['cityId']][$row["cityName"]][] = array_slice($row,-3);
        }
    }
    
    if (!isset($result)) {   // don't need to check rowCount() at all
        $result = 'Runs not found';
    } else {
        $result = array_values($result);
    }
    
    $result = array("status" => true, "runsBasedOnCity" => $result);
    
    var_export(json_encode($result, JSON_PRETTY_PRINT));
    

    出力:

    '{
        "status": true,
        "runsBasedOnCity": [
            {
                "id": "1",
                "cityId": "1",
                "Bengaluru": [
                    {
                        "runId": "2",
                        "distance": "10k",
                        "status": "1"
                    },
                    {
                        "runId": "1",
                        "distance": "5k",
                        "status": "1"
                    },
                    {
                        "runId": "5",
                        "distance": "3k",
                        "status": "0"
                    }
                ]
            },
            {
                "id": "4",
                "cityId": "2",
                "Chennai": [
                    {
                        "runId": "1",
                        "distance": "5k",
                        "status": "1"
                    },
                    {
                        "runId": "2",
                        "distance": "10k",
                        "status": "1"
                    },
                    {
                        "runId": "4",
                        "distance": "15k",
                        "status": "1"
                    }
                ]
            }
        ]
    }'
    

    idをどのように保存したいかを説明した後 サブ配列の値、ここにその解決策があります:

    コード:(デモ

    foreach ($resultset as $row) {
        if (!isset($result[$row["cityId"]])) {
            $result[$row["cityId"]] = array("cityId" => $row["cityId"], $row["cityName"] => array(array("id" => $row["id"])+array_slice($row,-3)));
        } else {
            $result[$row['cityId']][$row["cityName"]][] = array("id" => $row["id"])+array_slice($row,-3);
        }
    }
    
    if (!isset($result)) {   // don't need to check rowCount() at all
        $result = 'Runs not found';
    } else {
        $result = array_values($result);
    }
    
    $result = array("status" => true, "runsBasedOnCity" => $result);
    var_export(json_encode($result, JSON_PRETTY_PRINT));
    



    1. TextFieldとリストメニューに基づく基準検索

    2. Oracleでスキュー異常を書き込み、PostgreSQLはトランザクションをロールバックしません

    3. innodbをロックするためのダミーガイド

    4. ALTERを使用するとMySQLの不明な列エラーが発生し、動作がわかりません