【问题标题】:JSON children only got the first child in PHPJSON 孩子只得到 PHP 中的第一个孩子
【发布时间】:2021-06-28 19:47:45
【问题描述】:

整天都在尝试做看起来很简单的事情,但我无法从 json 获取所有子节点(仅在此代码中获得第一个子节点):

foreach($obj->data[0]->region as $code_id) {              
    echo $code_id->code_id . "\n"; 
        
}

JSON sn-p 下面:

{
"data": [
        {
        "record_id": 9,
        "region": [
            {
                "code_id": 2,
                "code_name": "CA"
            },
            {
                "code_id": 3,
                "code_name": "WY"
            }
           
        ]
        },
        {
        "record_id": 10,
        "region": [
            {
                "code_id": 4,
                "code_name": "CA"
            },
            {
                "code_id": 5,
                "code_name": "WY"
            }
           
        ]
        }
    ]
}

任何教程的链接或建议都非常感谢:(

【问题讨论】:

  • 您将获得第一个子节点,因为您仅访问第一个索引$obj->data[0]
  • data[0] 你只会得到第一个索引。
  • 您想提供更多详细信息吗?
  • 我也是这样尝试的,但是返回空白白页:foreach ($arr as $key => $value) { if ($key == 'data') { foreach ($value as $key2 => $val2) { foreach ($val2 as $key3 => $val3) { if($key3=='region'); var_dump($key4); } } } } }

标签: php json foreach


【解决方案1】:

如果你想遍历两个数组,下面的方法会起作用:

// Loop over everything inside of data
foreach($obj->data as $thing ) {
    // Loop over each region
    foreach($thing->region as $region) {
        echo $region->code_id . "\n";
    }
}

输出是:

2
3
4
5

在这里演示:https://3v4l.org/NQTV6

【讨论】:

  • 谢谢先生,它工作正常。非常感谢。我在您的代码上看到了双重 foreach。我会注意到这一点
【解决方案2】:

试试这个...

不是最优化的解决方案,但应该能让您重回正轨。

foreach($obj->data[0] as $record) { 
    if(isset($record->region)){
        foreach($record->region as $code){
            echo $code->code_id . "\n";
        }
    }
}

【讨论】:

  • 感谢您的建议。先生,您的代码也有效
猜你喜欢
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 2022-10-19
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 2016-03-05
相关资源
最近更新 更多