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); } }
你原有代码的问题
- 第二个
foreach语法完全错误:foreach ($id => array_combine($a, $b))不符合PHP循环的语法规则,array_combine是合并两个数组为键值对的函数,此处完全不适用。 - 未正确嵌套遍历
days数组,忽略了每个abc元素下的二级数组结构,逻辑方向错误。
手动解析JSON的补充说明
如果未使用框架自动处理请求,需要先手动解析POST原始数据:
$jsonData = file_get_contents('php://input'); // 解析为对象,加true参数则解析为数组 $data = json_decode($jsonData); // 之后遍历$data->abc即可,逻辑同上文
内容的提问来源于stack exchange,提问作者Lalarukh khan
相关产品推荐
相关产品推荐

