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

FormData传递数组时PHP端接收为逗号分隔字符串的问题求助

解决FormData发送数组到PHP时被扁平化的问题

嘿,这是FormData处理数组时很容易踩的一个小坑,我来帮你捋清楚问题所在和解决办法!

问题根源

你当前的代码里,当遇到数组类型的值时,直接把整个数组传给了fd.append():

fd.append(key, this.data.choices[section]);

FormData会自动把数组转换成逗号分隔的字符串,这就导致PHP接收到subjects时,把这个长字符串当成了数组的单个元素,而不是拆分多个元素。(你看到packages和usertypes看似正常,只是因为它们的数组只有一个元素,转成字符串后和单个元素没区别而已)

修复代码

你需要遍历数组中的每个元素,逐个调用append()方法,把每个元素单独添加到同一个带[]的key下:

let fd = new FormData();
for (const section in this.data.choices) {
  const value = this.data.choices[section];
  if (Array.isArray(value)) {
    // 遍历数组元素,逐个追加到同一个key
    value.forEach(item => {
      fd.append(`${section}[]`, item);
    });
  } else {
    fd.append(section, value);
  }
}

fetch('?get=plan', {method: 'post', body: fd})
// ...后续逻辑

为什么这样有效?

当你多次对同一个带[]的key调用append()时,PHP会自动把这些值解析为一个有序数组。这样处理后,你的$_POST输出就会变成符合预期的结构:

Array
(
  [mode] => o7ew4xqybwt
  [packages] => Array
        (
            [0] => wx2xv1cakbe
        )
  [usertypes] => Array
        (
            [0] => s
        )
  [subjects] => Array
        (
            [0] => bxn5g1igm4l
            [1] => u1osgpv37fl
            [2] => q2scwqb27k7
            [3] => fl9riri0wpr
        )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:47:38