如何使用PHP解析JSON中的对象的嵌套数组?

问题描述:

我尝试过,并能利用这段代码打印出整个JSON文件作为字符串:如何使用PHP解析JSON中的对象的嵌套数组?

$str_data = file_get_contents("DB/TEITC502_OS.json"); 
$data = json_decode($str_data,true); 

echo $str_data[0]; 

具有以下结构的JSON文件:

[ 
    { 
    "id": 1, 
    "name": "Overview of Operating system", 
    "hours": 4, 
    "sm": [ 
     { 
     "smid": 1.1, 
     "smn": "Overview of Operating system objectives and functions" 
     }, 
     { 
     "smid": 1.2, 
     "smn": "Evolution of OS" 
     } 
    ] 
    }, 
    { 
    "id": 2, 
    "name": "Process Management", 
    "hours": 10, 
    "sm": [ 
     { 
     "smid": 2.1, 
     "smn": "Process" 
     }, 
     { 
     "smid": 2.2, 
     "smn": "Process States" 
     }, 
     { 
     "smid": 2.3, 
     "smn": "Process Control Block (PCB)" 
     } 
    ] 
    } 
] 

但是我想打印出来每个这些细节(id,名称,小时,smid,smn)分别使用PHP。

我应该如何改变echo声明才能完成此操作?

+0

您需要通过intire阵列循环。我会建议使用'foreach()'循环。 – 2015-03-19 08:02:48

+0

没有额外的括号和分号(因为现在它被打印为字符串),我很抱歉它不会清楚。 @SchalkKeun,我想到了,但我不确定如何选择各种嵌套数组元素。你能否提供一些例子或参考? – 2015-03-19 08:09:07

每一行呼应键和值,你可以递归做到这一点:

​​

产量:

0 id : 1 
0 name : Overview of Operating system 
0 hours : 4 
0 sm 0 smid : 1.1 
0 sm 0 smn : Overview of Operating system objectives and functions 
0 sm 1 smid : 1.2 
0 sm 1 smn : Evolution of OS 
1 id : 2 
1 name : Process Management 
1 hours : 10 
1 sm 0 smid : 2.1 
1 sm 0 smn : Process 
1 sm 1 smid : 2.2 
1 sm 1 smn : Process States 
1 sm 2 smid : 2.3 
1 sm 2 smn : Process Control Block (PCB) 
+0

非常感谢,这真的很有帮助。 – 2015-03-19 08:16:32

+0

嘿有没有办法让这个嵌套列表呢? – 2015-03-19 18:06:25

+0

当然,尝试一下,现在我不能因为我很忙,只能用手机,但明天早上我可以尝试,但它应该很容易。 – 2015-03-19 18:17:19

您可以使用循环来回显数组内容。我添加了一个检查,如果当前值是一个数组,所以我们也可以得到它的内部内容。

foreach ($data as $dat) { 
    if (is_array($dat)) { 
     foreach ($dat as $d) { 
      echo $d . '<br>'; 
     } 
    } else { 
     echo $dat . '<br> ' ; 
    } 
} 

希望这会有所帮助。