【问题标题】:Loop trough a nested json array in PHP循环遍历 PHP 中的嵌套 json 数组
【发布时间】:2021-05-31 10:48:16
【问题描述】:

我需要循环遍历 PHP 中的嵌套 JSON 数组。 JSON 键并不总是相同的,请参见下面的示例:

[
  {
    "id": 1,
    "more": {
      "city": "New York",
      "street": "W 58th St"
    },
    "group": 4,
    "name": "Ellie",
    "status": "offline",
    "phone": "1234567890",
    "disabled": false
  },
  {
    "id": 2,
    "more": {
      "city": "New York",
      "street": "W 101st St",
      "postal code": "12345"
    },
    "group": 7,
    "name": "Diane",
    "age": "25",
    "phone": "",
    "contact": "2",
  }
]

到目前为止我的代码是这样的:

$user_details = json_decode($json, true);   
foreach ($user_details as $details) {
    foreach ($details as $key => $value) {
        echo $key .': '. $value, PHP_EOL;

    }
}

问题是,当我尝试运行上面的代码时,more 数组出现错误:

id: 1
<b>Warning</b>:  Array to string conversion in <b>[...][...]</b> on line <b>15</b><br />
more: Array
group: 4
name: Ellie
status: offline
...

理想情况下,输出应该是这样的:

id: 1
city: New York
street: "W 58th St
group: 4
name: Ellie
status: offline
...

关于如何改进我的代码以输出正确数据的任何建议?

【问题讨论】:

    标签: php arrays json multidimensional-array


    【解决方案1】:

    你有 3 个数组。例如,查看您的第一项,其中 id = 1。对于“更多”,您有:

    $user_details[0]['more']['city'] = 'New York';
    

    您的外部循环抓取元素 0 到 1。内部循环有键 = 'id'、'more'、'group'、'name' 等。当您尝试第二次执行 echo 时,您的变量是:

    $key = 'more';
    $value = [ 'city' => 'New York', 'street' => 'W 58th St' ];
    

    您的 echo 语句尝试将 $value 视为字符串,但它是一个数组。

    将 echo 语句包装在 if () 语句中,这样:

    if ( is_array( $value ) ) {
        // For an array, do something different
        foreach ( $value as $key1 => $value1 ) {
            echo $key1 . ': ' . $value1, PHP_EOL
        }
    } else {
        // Do your echo here.
        echo $key .': '. $value, PHP_EOL;
    }
    

    【讨论】:

    • 感谢 Paul 提供代码和解释!
    【解决方案2】:

    echo $key .': '. $value, PHP_EOL; 这一行将数组类型的值视为字符串,因为它将值连接到字符串。

    相反,您可以执行类似的操作来检查值本身是否是一个数组,如果是,则打印它的每个成员。

    if ( is_array($value) ) {
       // One more nested loop to print the keys and values
    }
    

    当然,如果还有其他嵌套对象或数组,你也会遇到同样的问题。所以最好实现某种类型的逻辑来处理嵌套对象或数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      相关资源
      最近更新 更多