You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP向JS文件的数组中插入新对象

问题解决说明

错误原因

  • db.js存储的不是纯JSON内容:文件开头有let dataGoods = 的JS变量声明前缀,结尾有分号;后缀,直接传入json_decode会解析失败返回null,后续调用array_push就会触发参数类型错误
  • 待追加的$datae本身就是PHP数组,不需要额外调用json_decode处理,直接传入array_push即可
  • 原写入逻辑直接输出纯JSON,会覆盖掉原有的JS变量声明,导致db.js后续无法被前端正常引用

修正后代码

// 读取db.js文件内容
$jsContent = file_get_contents('db.js');
// 提取数组的纯JSON部分:去掉前缀'let dataGoods = '和结尾的';'
$jsonStr = preg_replace('/^let\s+dataGoods\s*=\s*|\s*;$/', '', $jsContent);
// 解析JSON为PHP数组,第二个参数传true返回关联数组,避免对象格式兼容问题
$tempArray = json_decode($jsonStr, true);

// 直接把$datae追加到数组
array_push($tempArray, $datae);

// 编码回JSON,保留中文的同时保留原文件的格式化效果
$newJson = json_encode($tempArray, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
// 拼回JS变量声明格式
$newJsContent = "let dataGoods = {$newJson};";
// 写入文件
file_put_contents('db.js', $newJsContent);

额外注意事项

可增加JSON解析错误判断,避免文件被篡改后解析失败报错:

if (json_last_error() !== JSON_ERROR_NONE) {
    // 解析失败时的兜底处理,比如初始化空数组
    $tempArray = [];
}

建议对$_POST传入的name和description参数做安全过滤,避免注入恶意内容。

内容的提问来源于stack exchange,提问作者Erzhan The_Best

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:15:04