2017-07-09 20 views
0

SQLクエリから正しいJSON出力を取得する際に問題が発生しています。基本的に私が苦労しているのは、単数形オプションオブジェクトではなく、複数のオプションオブジェクトを取得することです。 PHPでJSONにSQLクエリ結果をマッピング

$query = 'SELECT matchup.matchupID, matchup_option.player_name, matchup_option.player_id FROM matchup 
     INNER JOIN matchup_option 
     ON matchup_option.matchupID= matchup.matchupID;'; 

$attachments = $db->query($query); 
$data = array(); 
while ($attachment = $db->fetch_array($attachments)){ 
    $data[] = array (
     'id' => $attachment['matchupID'], 
     'options' => array(
      array (
       "name" => $attachment['player_name'], 
       "playerid" => $attachment['player_id'] 
      ) 
     ) 
    ); 
    //VAR_DUMP($attachment); 
} 
$data = array("matchup"=>$data); 
print json_encode($data); 

は私にこの出力与える:

{ 
"matchup":[ 
    { 
    "id":"111222", 
    "options":[ 
     { 
      "name":"111", 
      "playerid":"111" 
     } 
    ] 
    }, 
    { 
    "id":"111222", 
    "options":[ 
     { 
      "name":"222", 
      "playerid":"222" 
     } 
    ] 
    } 
] 
} 

をそしてここで私が取得しようとしているものです:私はベストプラクティスだけでなく、構造これに従うことを希望

{ 
"matchup":[ 
    { 
    "id":"111222", 
    "options":[ 
     { 
      "name":"111", 
      "playerid":"111" 
     }, 
     { 
      "name":"222", 
      "playerid":"222" 
     } 
    ] 
    } 
] 
} 

適切に、これについてもっと良い方法があれば教えてください!あなたが$dataの配列のキーとして$attachment['matchupID']を格納する必要があり

+0

* IDは*すべての行に対して同じでしょうか? –

答えて

1

$data = array(); 
while ($attachment = $db->fetch_array($attachments)){ 
    if (!isset($data[$attachment['matchupID']])) { 
     $data[$attachment['matchupID']] = array (
      'id' => $attachment['matchupID'], 
      'options' => array() 
     ); 
    } 
    $data[$attachment['matchupID']]['options'][] = array (
     "name" => $attachment['player_name'], 
     "playerid" => $attachment['player_id'] 
    ); 
} 

// use `array_values` to reindex `$data` 
$data = array("matchup" => array_values($data)); 
print json_encode($data); 
+0

ソリューションはいつもとてもシンプルです!友よありがとう。 – user3344880

関連する問題