簡體   English   中英

使用PHP將MySQL結果轉換為JSON

[英]MySQL results to JSON with PHP

我在這里看到了很多類似的問題,但是我一直無法獲得想要的輸出。 有人可以幫我嗎? 如何生成以下JSON結構? 我的查詢很好,我只是想不出如何遍歷並獲取它。 謝謝

期望的輸出

{
    "players": [
        {
            "id": 271,
            "fname": "Carlos",
            "lname": "Beltran",
            "position": "OF",
            "stats": [
                {
                    "year": "2010",
                    "hr": 32,
                    "rbi": 99,
                    "team": "NYM"
                },
                {
                    "year": "2011",
                    "hr": 35,
                    "rbi": 100,
                    "team": "STL"
                }, 
                {
                ............
                }
            ]
        },
        {
          ........
        }
    ]
}

電流輸出

{"0":{"cbs_id":"18817","fname":"Carlos","lname":"Beltran"},"stats":[{"year":"2007","hr":"33","rbi":"112"}]}

{"0":{"cbs_id":"174661","fname":"Willie","lname":"Bloomquist"},"stats":[{"year":"2007","hr":"2","rbi":"13"}]}

{"0":{"cbs_id":"1208693","fname":"Brennan","lname":"Boesch"},"stats":[{"year":"2010","hr":"14","rbi":"67"}]}

這是用以下命令生成的:(我知道我已經走了)

if ($result = mysqli_query($link, $sql)) {

        $player = array();

        while ($row = $result->fetch_assoc())
        {

            $player[] = array (
            'cbs_id' => $row['cbs_id'],
            'fname' => $row['fname'],
            'lname' => $row['lname']
            );

            $player['stats'][] = array(
                'year' => $row['year'],
                'hr' => $row['hr'],
                'rbi' => $row['rbi']
            );

        }

        $json = json_encode($player);
        echo "<pre>$json</pre>";

        mysqli_free_result($result);
    }
}

注意:每個玩家可以有一個以上的“統計”記錄(年,小時,rbi等)

這可能會提供您想要的:

$players = array();

while ($row = $result->fetch_assoc())
{
  $id = (int)$row['cbs_id'];

  if ( ! isset($players[$id]))
  {
    // New player, add to $players array.
    // For the moment index players by ID so stats can be easily added
    // to an existing player. Without indexing (using $players[] = ...),
    // the same player would be added for each stats record related to
    // him.
    $players[$id] = array(
      'id'       => $id,
      'fname'    => $row['fname'],
      'lname'    => $row['lname'],
      'stats'    => array()
    );
  }

  // Add the stats
  $players[$id]['stats'][] = array(
    'year' => (int)$row['year'],
    'hr'   => (int)$row['hr'],
    'rbi'  => (int)$row['rbi']
  );
}

// Players are indexed by their ID in $players but need to be contained in
// a JSON array, so use array_values() to remove indices, e.g. convert
//
//     array(
//       271 => array('id' => 271, ...),
//       ...
//     )
//
// to
//
//     array(
//       array('id' => 271, ...),
//       ...
//     )
//
$data = array('players' => array_values($players));
$json = json_encode($data);

最終,您可能會舍棄整數強制轉換,然后讓PHP通過使用MYSQLI_OPT_INT_AND_FLOAT_NATIVE mysqli連接選項自動將字符串化的數值數據(這是MySQL查詢結果的默認行為)轉換回PHP數字,如本頁示例5所述。 請注意,它要求mysqlnd庫供PHP使用(您可以使用phpinfo進行檢查)。

您需要一個關聯數組。 這樣的事情應該讓您入門

$data = array(
    'players' => array(
        array(
           'id' => 271,
           'fname': 'Carlos',
           'lname': 'Beltran',
           'position': 'OF',
           'stats' => array(
               array(
                   'year' => 2010,
                   'hr': 32,
                   'rbi': 99,
                   'team': 'NYM'
               ),
               ...
           )
        ),
        ...
    )
);

要將其編碼為json,請使用json_encode

$json = json_encode($data);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM