使用PHP foreach解析JSON数组

25

想知道为什么我的PHP代码无法显示JSON数据中所有"Values"的"Value":

$user = json_decode(file_get_contents($analytics));
foreach($user->data as $mydata)
{
     echo $mydata->name . "\n";

}        
foreach($user->data->values as $values)
{
     echo $values->value . "\n";
}

第一个foreach很好地运行了,但第二个则抛出了一个错误。

{
   "data": [
      {
         "id": "MY_ID/insights/page_views_login_unique/day",
         "name": "page_views_login_unique",
         "period": "day",
         "values": [
            {
               "value": 1,
               "end_time": "2012-05-01T07:00:00+0000"
            },
            {
               "value": 6,
               "end_time": "2012-05-02T07:00:00+0000"
            },
            {
               "value": 5,
               "end_time": "2012-05-03T07:00:00+0000"
            }, ...

什么错误?告诉我们输出是什么。 - Jonathan M
$user->data 是一个数组吗?因为你可以用 foreach 遍历它。 - Jonas Osburg
1
错误信息为:警告:foreach() 函数的参数无效。$user->data 似乎是一个 [0] 数组。 - ToddN
3个回答

54

你可能想要做以下事情:

foreach($user->data as $mydata)

    {
         echo $mydata->name . "\n";
         foreach($mydata->values as $values)
         {
              echo $values->value . "\n";
         }
    }        

这就是我一直在寻找的!奇怪,我以为我已经尝试过了,谢谢。 - ToddN
非常感谢,这正是我在寻找的! - Rizwan Ahmed
简单而优雅的解决方案 :) - Parag Jadhav

8

您需要指定在data中使用哪个索引,或者遍历整个数组。

例如,要获取外部数组中第4个索引处的值:

foreach($user->data[3]->values as $values)
{
     echo $values->value . "\n";
}

浏览全部内容:

foreach($user->data as $mydata)
{
    foreach($mydata->values as $values) {
        echo $values->value . "\n";
    }

}   

5

$user->data 是一个对象数组,数组中的每个元素都有一个 namevalue 属性(以及其他属性)。

尝试将第二个 foreach 放在第一个内部。

foreach($user->data as $mydata)
{
    echo $mydata->name . "\n";
    foreach($mydata->values as $values)
    {
        echo $values->value . "\n";
    }
}

谢谢你,@Rocket,这就是我所需要的。Jonas 先回答了 =p - ToddN
@ToddN: 糟糕,被打败了76秒 :-P - gen_Eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接