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

JS提交表单时数组被转为字符串导致PHP端报错如何解决?

问题修复方案

根本原因

你当前遇到的报错是前端提交的array字段为PHP数组格式的字符串,并非可直接遍历的二维数组。你使用(array)$_POST['array']强转只会把整个字符串塞到新数组的第一个元素中,遍历过程中$vals实际是字符串类型,自然无法用列名作为偏移量取值,就会抛出Illegal string offset警告。

修复方案

方案1:仅修改后端代码(无需调整前端逻辑)

如果你不想改动现有前端提交逻辑,可直接解析前端传入的PHP数组字面量字符串:

// 替换原来的 $array  = (array)$_POST['array']; 代码
$arrayStr = $_POST['array'];
// 解析var_export格式的数组字符串,若输入来源可控可直接使用,不可控请额外加安全校验
eval('$array = ' . $arrayStr . ';');

// 后续原有逻辑保持不变
$date  = $_POST['col_date'];
$cash = $_POST['cash'];

$res  = array();
foreach($array as $vals){
    if(array_key_exists($vals[$date],$res)){
        $res[$vals[$date]][$cash]    += $vals[$cash];
        $res[$vals[$date]][$date]        = $vals[$date];
    }
    else{
        $res[$vals[$date]]  = $vals;
    }
}

方案2:改用JSON传输(更规范、更安全,推荐)

即使列名经常变动,也可以使用通用的JSON格式传输数组,避免PHP专属语法的兼容和安全问题:

  1. 前端调整:输出数组到input框时,PHP端用json_encode转换数组格式,替代原来的var_export输出
  2. 后端解析逻辑调整:
// 替换原来的 $array  = (array)$_POST['array']; 代码
$array = json_decode($_POST['array'], true);
// 增加解析错误校验
if (json_last_error() !== JSON_ERROR_NONE) {
    die('传入的数组格式非法');
}

// 后续原有逻辑保持不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 13:36:03