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

如何在PHP中将多表单输入值转换为指定结构的JSON数组?

问题分析与解决方法

首先纠正你期望的JSON结构(原结构存在语法错误,对象键值对应使用冒号,且results应是包含多个对象的数组),正确的目标结构应为:

{
  "results": [
    {"title": "xxx", "description": "xxx", "total": "xxx"},
    {"title": "xxx", "description": "xxx", "total": "xxx"}
  ]
}

你的PHP代码存在几个核心问题:

  • 循环中每次用$_POST['results'] = json_encode(...)直接赋值,会覆盖之前所有数据,无法累积多个条目
  • 最后对已JSON编码的结果再次执行json_encode,导致双重编码,输出的是转义后的字符串而非合法JSON对象
  • 不必要地将单个条目包裹在嵌套数组中

修复后的代码如下:

// 初始化结果数组,避免污染$_POST全局变量
$results = [];

// 先检查三个字段是否都存在,防止未提交时报错
if (isset($_POST["title"], $_POST["description"], $_POST["total"])) {
    $itemCount = count($_POST["title"]);
    for ($i = 0; $i < $itemCount; $i++) {
        // 验证当前条目至少有一个字段非空
        if (!empty($_POST["title"][$i]) || !empty($_POST["description"][$i]) || !empty($_POST["total"][$i])) {
            // 向结果数组追加单个条目对象
            $results[] = [
                'title' => cleardata($_POST["title"][$i]),
                'description' => cleardata($_POST['description'][$i]),
                'total' => cleardata($_POST['total'][$i])
            ];
        }
    }
}

// 组装目标结构并输出合法JSON
echo json_encode(['results' => $results]);

关键修复说明:

  • 单独初始化$results数组,避免修改全局的$_POST变量
  • 使用$results[] = ...的方式追加条目,实现多数据累积
  • 最后一次性组装目标结构并执行JSON编码,彻底避免双重编码问题
  • 增加字段存在性检查,提升代码健壮性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:55:18