[英]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.