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

PHP遍历JQuery传递的多维JSON数组,items部分遍历受阻求助

解决JSON解码后Invoice数组的items遍历问题

嘿,我看你现在卡在遍历JSON解码后的数组里的items部分了,咱们来一步步捋清楚问题出在哪,然后搞定它~

首先先分析下你的数组结构:从print_r()的输出能看到,$data里有两个元素——第一个是字符串"Invoice"(也就是$data[0]),第二个才是包含所有发票数据的数组($data[1])。你之前的嵌套foreach把整个$data都遍历了,还重复使用了$key变量,这就导致层级混乱,自然处理不了items部分。

修正后的遍历代码

<?php
$data = json_decode($_POST['data'], true); 
echo '<pre>';

// 跳过$data[0]的字符串元素,直接处理$data[1]里的发票数据
foreach ($data[1] as $invoiceItem) {
    // 提取当前发票的header信息并输出
    $header = $invoiceItem['Invoice']['header'];
    foreach ($header as $key => $value) {
        echo "$key $value ";
    }
    
    // 提取当前发票的items列表,逐个遍历输出
    $items = $invoiceItem['Invoice']['items'];
    foreach ($items as $item) {
        foreach ($item as $key => $value) {
            echo "$key $value ";
        }
    }
    // 每个发票的内容结束后换行,可读性更好
    echo "\n";
}

echo '</pre>';
?>

代码说明

  1. 直接定位到$data[1]:因为$data[0]只是一个无意义的字符串,我们要处理的发票数据都在$data[1]里。
  2. 拆分header和items:先处理每个发票的header信息,再单独遍历items列表里的每个商品项,这样层级清晰,不会出现遍历混乱。
  3. 避免重复变量:每个foreach用不同的循环变量(比如$invoiceItem、$item),不会覆盖之前的变量值。

运行这段代码后,就能得到你想要的输出格式:

date 20-Jan-2020 buyer Buyer 1 order 006896 name Name 1 quantity Quantity 1 rate 199.99 name Name 2 quantity Quantity 2 rate 99.99 
date 10-Jan-2020 buyer Buyer 2 order 007033 name Item A quantity 25 rate 19.99 name Item B quantity 30 rate 29.99 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 10:07:49