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>'; ?>
代码说明
- 直接定位到
$data[1]:因为$data[0]只是一个无意义的字符串,我们要处理的发票数据都在$data[1]里。 - 拆分header和items:先处理每个发票的header信息,再单独遍历items列表里的每个商品项,这样层级清晰,不会出现遍历混乱。
- 避免重复变量:每个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
相关产品推荐
相关产品推荐

