2015-03-19 42 views
0

我嘗試過,並能利用這段代碼打印出整個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

回答

2

每一行呼應鍵和值,你可以遞歸做到這一點:

​​

產量:

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

2

您可以使用循環來回顯數組內容。我添加了一個檢查,如果當前值是一個數組,所以我們也可以得到它的內部內容。

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

希望這會有所幫助。