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

phpマージjson配列

    詳細な説明

    json_array()に参加する必要があるキーを指定する必要がある場合は、取得したキー値に基づいてJSON配列に参加できます。 。

    json_objectsを検討します PHPコードに基づいて次のようになります。

    <?php
    $array1 = '[
    {"PlayerID":"17794204","userName":"Vandiel","castleCount":"9","NotUpd":"1476253231000"},
    {"PlayerID":"21532584","userName":"Mayland","castleCount":"1","NotUpd":"0"},
    {"PlayerID":"21539896","userName":"Dana","castleCount":"9","NotUpd":"0"}
    ]';
    $array2 = '[
    {"PlayerID":"17794204","Trouble":"2"},
    {"PlayerID":"21532584","Trouble":"0"},
    {"PlayerID":"21539896","Trouble":"0"}
    ]';
    ?>
    

    したがって、json_objectsをマージするには、最初にjson_decode()を使用する必要があります。 取得した両方のアレイについて。

    $decode_one = json_decode($array1,TRUE);
    $decode_two = json_decode($array2,TRUE);
    

    したがって、json_decoded()の出力 文字列は次のようになります。

    最初にデコードされた文字列:

    Array ( [0] => Array ( [PlayerID] => 17794204 [userName] => Vandiel [castleCount] => 9 [NotUpd] => 1476253231000 ) [1] => Array ( [PlayerID] => 21532584 [userName] => Mayland [castleCount] => 1 [NotUpd] => 0 ) [2] => Array ( [PlayerID] => 21539896 [userName] => Dana [castleCount] => 9 [NotUpd] => 0 ) ) 
    

    2番目のデコードされた文字列:

    Array ( [0] => Array ( [PlayerID] => 17794204 [Trouble] => 2 ) [1] => Array ( [PlayerID] => 21532584 [Trouble] => 0 ) [2] => Array ( [PlayerID] => 21539896 [Trouble] => 0 ) )
    

    したがって、コードの関数は次のようになります。

    PlayerIDを検討しました ユニークとして パラメータと配列を結合しました。

    function merge_json_decoded_arrays($decode_one,$decode_two) {
        $data = array();
        $arrayAB = array_merge($decode_one,$decode_two);
        foreach ($arrayAB as $value) {
          $id = $value['PlayerID'];
          if (!isset($data[$id])) {
            $data[$id] = array();
          }
          $data[$id] = array_merge($data[$id],$value);
        }
        return $data;
      }
    

    array_merge()を実行する必要があるコードからこのような関数を呼び出す必要があります 操作。

    $merged_array = merge_json_decoded_arrays($decode_one,$decode_two);
    

    最後に、セットアップで完全なコードが次のように表示されます。

    完全なコード:

    <?php
    $array1 = '[
    {"PlayerID":"17794204","userName":"Vandiel","castleCount":"9","NotUpd":"1476253231000"},
    {"PlayerID":"21532584","userName":"Mayland","castleCount":"1","NotUpd":"0"},
    {"PlayerID":"21539896","userName":"Dana","castleCount":"9","NotUpd":"0"}
    ]';
    $array2 = '[
    {"PlayerID":"17794204","Trouble":"2"},
    {"PlayerID":"21532584","Trouble":"0"},
    {"PlayerID":"21539896","Trouble":"0"}
    ]';
    
    $decode_one = json_decode($array1,TRUE);
    $decode_two = json_decode($array2,TRUE);
    
    function merge_json_decoded_arrays($decode_one,$decode_two) {
        $data = array();
        $arrayAB = array_merge($decode_one,$decode_two);
        foreach ($arrayAB as $value) {
          $id = $value['PlayerID'];
          if (!isset($data[$id])) {
            $data[$id] = array();
          }
          $data[$id] = array_merge($data[$id],$value);
        }
        return $data;
      }
    $merged_array = merge_json_decoded_arrays($decode_one,$decode_two);
    ?>
    

    マージされた配列を表示するには、print_r()を実行する必要があります 配列を表示します。

    配列出力コード:

    print_r($merged_array);
    

    出力:

    Array ( [17794204] => Array ( [PlayerID] => 17794204 [userName] => Vandiel [castleCount] => 9 [NotUpd] => 1476253231000 [Trouble] => 2 ) [21532584] => Array ( [PlayerID] => 21532584 [userName] => Mayland [castleCount] => 1 [NotUpd] => 0 [Trouble] => 0 ) [21539896] => Array ( [PlayerID] => 21539896 [userName] => Dana [castleCount] => 9 [NotUpd] => 0 [Trouble] => 0 ) )
    

    JSON出力として必要な場合は、json_encode()を実行する必要があります 取得したarray() 操作を実行します。

    JSON出力コード:

    print_r(json_ecode($merged_array));
    

    出力:

    {"17794204":{"PlayerID":"17794204","userName":"Vandiel","castleCount":"9","NotUpd":"1476253231000","Trouble":"2"},"21532584":{"PlayerID":"21532584","userName":"Mayland","castleCount":"1","NotUpd":"0","Trouble":"0"},"21539896":{"PlayerID":"21539896","userName":"Dana","castleCount":"9","NotUpd":"0","Trouble":"0"}}
    

    最速の実行方法はこのようになります

    json_stringsをデコードしてから、foreach()を介して両方をllopする必要があります。 次に、array()と組み合わせます それに参加する必要があること。

    $decode_one = json_decode($array1,TRUE);
    $decode_two = json_decode($array2,TRUE);
    foreach ($decode_one as $key => $first_value) {
        foreach ($decode_two as $key_two => $second_value) {
            if($first_value['PlayerID']==$second_value['PlayerID'])
            { $decode_one[$key]['Trouble'] = $second_value['Trouble'];//Here if the key exists it will join the Trouble with the First decoded array }
            else {}
        }
    }
    $combined_output = json_encode($decode_one); //This will return the output in json format.
    

    出力:

    [{"PlayerID":"17794204","userName":"Vandiel","castleCount":"9","NotUpd":"1476253231000","Trouble":"2"},{"PlayerID":"21532584","userName":"Mayland","castleCount":"1","NotUpd":"0","Trouble":"0"},{"PlayerID":"21539896","userName":"Dana","castleCount":"9","NotUpd":"0","Trouble":"0"}]
    


    1. tomcatコンテナ上のWebアプリをHibernate経由でmysqlコンテナに接続します

    2. 複数の結合されたテーブルでのMySQLGROUP_CONCATまたはPIVOTの使用

    3. SUM()を使用したMySQLクエリが期待される結果を返さない

    4. SQLサブクエリの結果で「LIKE」を使用する