如何在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
相关产品推荐
相关产品推荐

