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

时间:2015-03-19 07:56:58

标签: php arrays json

我尝试过并且能够使用以下代码将整个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)"
      }
     ]
   }
]

但是我想用PHP分别打印出这些细节(id,name,hours,smid,smn)。

我应该对echo语句进行哪些更改才能完成此操作?

2 个答案:

答案 0 :(得分:2)

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

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

希望这有帮助。

答案 1 :(得分:2)

要在每一行中回显键和值,您可以递归地执行:

function echo_array($a, $key){
    foreach($a as $key1 => $array1){
        if(!is_array($array1)){
            echo "$key $key1 : $array1<br/>";
        }else{
            echo_array($array1,"$key $key1");
        }
    }
}
echo_array($data,'');

收率:

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)