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

PHP中如何从API POST请求的JSON数据中提取二维数组?

PHP 从POST请求的JSON多维数组中提取数据

首先补全你提供的JSON完整结构(原结构缺少闭合符号,正确格式如下):

{
  "abc": [
    {"id": 123, "days": [{"a": 11, "b": 11},{"a":22, "b":22}]},
    {"id": 456, "days": [{"a": 33, "b": 33},{"a":44, "b":44}]}
  ]
}

正确的提取逻辑

假设你使用Laravel框架(代码中用到$request对象),框架会自动将POST的JSON请求解析为对象/数组,通过嵌套循环即可逐层提取数据:

$value = '';
foreach ($request->abc as $item) {
    // 获取当前项的ID
    $currentId = $item->id;
    // 遍历当前项的days二级数组
    foreach ($item->days as $dayData) {
        $aValue = $dayData->a;
        $bValue = $dayData->b;
        // 调用你的helper方法拼接结果
        $value .= $this->helper($currentId, $aValue, $bValue);
    }
}

如果$request->abc被解析为PHP数组而非对象,只需将箭头语法->替换为数组索引:

$value = '';
foreach ($request->abc as $item) {
    $currentId = $item['id'];
    foreach ($item['days'] as $dayData) {
        $aValue = $dayData['a'];
        $bValue = $dayData['b'];
        $value .= $this->helper($currentId, $aValue, $bValue);
    }
}

你原有代码的问题

  1. 第二个foreach语法完全错误:foreach ($id => array_combine($a, $b)) 不符合PHP循环的语法规则,array_combine是合并两个数组为键值对的函数,此处完全不适用。
  2. 未正确嵌套遍历days数组,忽略了每个abc元素下的二级数组结构,逻辑方向错误。

手动解析JSON的补充说明

如果未使用框架自动处理请求,需要先手动解析POST原始数据:

$jsonData = file_get_contents('php://input');
// 解析为对象,加true参数则解析为数组
$data = json_decode($jsonData); 
// 之后遍历$data->abc即可,逻辑同上文

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:40:36