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


How to parse nested array of objects in JSON using 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)"
      }
     ]
   }
]

然而,我想使用PHP单独打印出这些细节中的每一个(id、name、hours、smid、smn)。

为了实现这一点,我应该对echo语句进行哪些更改

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

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)

您可以使用循环来回显数组内容。我添加了一个检查当前值是否为数组的功能,这样我们也可以获取其内部内容。

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

希望这能有所帮助。