很多 PHP 初學者困惑:while 循環中構建數組並 json_encode,最終輸出到底是什麼結構?這裡詳細拆解一下。
$sayList = []; // 初始化空數組
while ($row = mysql_fetch_array($query)) {
$sayList[] = array(
'title' => "aa",
'pic' => "bb"
);
}
echo json_encode($sayList);
假設循環執行 3 次(查詢到 3 條記錄),$sayList 變為:
[
{"title": "aa", "pic": "bb"},
{"title": "aa", "pic": "bb"},
{"title": "aa", "pic": "bb"}
]
json_encode 輸出的是 JSON 數組,每個元素是一個對象,結構如下:
[
{"title":"aa","pic":"bb"},
{"title":"aa","pic":"bb"},
{"title":"aa","pic":"bb"}
]
$sayList[] = ... 是「入隊」操作,自動生成數字索引(0, 1, 2...)json_encode 對數字索引數組輸出 [...](JSON Array),對關聯數組輸出 {...}(JSON Object)$sayList[$row['id']] = ...,輸出則變為 {"1":{...}, "2":{...}}$row 取動態值而非寫死 "aa"/"bb"$result = [
'code' => 200,
'msg' => 'success',
'data' => $sayList
];
echo json_encode($result, JSON_UNESCAPED_UNICODE); // 中文不轉義
輸出:
{
"code": 200,
"msg": "success",
"data": [
{"title":"標題1","pic":"圖片1.jpg"},
{"title":"標題2","pic":"圖片2.jpg"}
]
}
掌握這個規律,前後端對接再也不會搞混格式。