首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 陣列轉 JavaScript 陣列:json_encode 最佳實踐與陣列構建技巧

     編輯:PHP 相關知識

核心方案:json_encode 直達前端

PHP 陣列轉 JS 陣列最標準、高效的方式是使用 json_encode()。它能將巢狀陣列、關聯陣列、物件完整序列化為 JSON 字串,前端直接解析為 JS 物件/陣列,無需手動拼接字串。

基本用法

<?php
// PHP 端:構建多維關聯陣列
$stores = [
    [
        'area' => '北京地區',
        'items' => '10',
        'detail' => [
            ['name' => '旗艦店', 'url' => 'https://www.example.com'],
            ['name' => '分店A', 'url' => 'https://www.example.com/a']
        ]
    ],
    [
        'area' => '上海地區',
        'items' => '11',
        'detail' => [
            ['name' => '旗艦店', 'url' => 'https://www.example.com'],
            ['name' => '分店B', 'url' => 'https://www.example.com/b']
        ]
    ]
];

// 輸出到 JS 變數(注意:需確保頁面編碼為 UTF-8)
?>
<script>
    // 直接嵌入,json_encode 輸出合法 JSON,JS 引擎原生解析
    const storeData = <?= json_encode($stores, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?>;
    console.log(storeData);
    // 存取範例:storeData[0].detail[0].name → "旗艦店"
</script>

關鍵參數說明

  • JSON_UNESCAPED_UNICODE:不將中文轉為 \uXXXX,減小體積、利於除錯(PHP 5.4+)。
  • JSON_UNESCAPED_SLASHES:不義斜線 /,URL 更易讀(PHP 5.4+)。
  • JSON_NUMERIC_CHECK:將數值字串轉為數值型別(謹慎使用,可能改變原本字串語意)。
  • JSON_PRETTY_PRINT:開發除錯時輸出縮排格式,生產環境請關閉。

從資料庫動態構建巢狀陣列

<?php
// 假設使用 PDO
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'user', 'pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$areas = $pdo->query("SELECT catid, catname, items FROM category WHERE parentid = 10")->fetchAll(PDO::FETCH_ASSOC);
$result = [];

foreach ($areas as $area) {
    $areaData = [
        'area' => $area['catname'],
        'items' => $area['items'],
        'detail' => []
    ];

    $stmt = $pdo->prepare("SELECT title, url FROM news WHERE catid = ?");
    $stmt->execute([$area['catid']]);
    while ($shop = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $areaData['detail'][] = [
            'name' => $shop['title'],
            'url' => $shop['url']
        ];
    }

    $result[] = $areaData;
}

// 輸出 JSON
header('Content-Type: application/json; charset=utf-8');
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
?>

常見坑點與解決

問題原因解決
中文變亂碼資料非 UTF-8 編碼資料庫連線設定 SET NAMES utf8mb4,PHP 檔案存為 UTF-8 無 BOM,必要時 mb_convert_encoding
前端報 SyntaxError直接 echo 陣列或未加引號務必用 json_encode,JS 側用 const data = <?= ... ?>;(無引號)或 AJAX 請求
索引陣列變物件PHP 陣列鍵非連續數字用 array_values() 重建索引,或前端 Object.values() 處理
大數據量效能差json_encode 佔用大量記憶體分頁載入、改用 JSON Stream(如 jsond 擴展)或前端分批請求

反向操作:json_decode

$jsonStr = '{"name":"Alice","age":25}';
$arr = json_decode($jsonStr, true); // 第二參數 true → 關聯陣列;false → stdClass 物件
var_dump($arr);

安全提醒

若 JSON 直接內嵌於 HTML <script> 標籤中,確保資料經過 json_encode(已處理引號、換行、</script> 等風險字元)。若透過 AJAX 回應,設定 Content-Type: application/json 並啟用 CORS 策略。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved