web-dev-qa-db-ja.com

PHP foreachを使用したJSON配列の解析

私のPHPコードがJSONデータの「値」のすべての「値」を表示しない理由を疑問に思う:

$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は正常に機能しますが、2番目はエラーをスローします。

{
   "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"
            }, ...
22
ToddN

次のことをしたいかもしれません:

foreach($user->data as $mydata)

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

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";
    }

}   
7
Jonathan M

$user->dataはオブジェクトの配列です。配列内の各要素には、nameおよびvalueプロパティ(およびその他)があります。

2番目のforeachを1番目の内部に配置してみてください。

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