2011-01-15 3 views
1

Я хочу сделать данные PHP JSON foreach, но я встретил некоторую проблему. Во-первых: я не могу получить часть properties. Во-вторых это alawys показать неправильно в строке: echo '<div class="image">... Fatal error: Cannot use object of type stdClass as array in ... Это данные JSON:PHP JSON данные foreach проблема

[ 
    { 
     "post_id": "504464716_189878284371815", 
     "message": "\"Happy Birthday to You\" \"Happy Birthday to Mama\"", 
     "attachment": { 
      "media": [ 
       { 
        "href": "http:\/\/www.facebook.com\/photo.php?fbid=493710409716&set=a.453260184716.254996.504464716", 
        "alt": "", 
        "type": "photo", 
        "src": "http:\/\/photos-f.ak.fbcdn.net\/hphotos-ak-snc4\/hs049.snc4\/34793_493710409716_504464716_5821684_2056840_s.jpg", 
        "photo": { 
         "aid": "2166659457206182932", 
         "pid": "2166659457211749620", 
         "owner": 504464716, 
         "index": 24, 
         "width": 225, 
         "height": 225 
        } 
       } 
      ], 
      "name": "Wall Photos", 
      "href": "http:\/\/www.facebook.com\/album.php?aid=254996&id=504464716", 
      "caption": "\"Happy Birthday to You\" \"Happy Birthday to Mama\"", 
      "description": "", 
      "properties": [ 
       { 
        "name": "By", 
        "text": "Suman Acharya", 
        "href": "http:\/\/www.facebook.com\/profile.php?id=504464716" 
       } 
      ], 
      "icon": "http:\/\/static.ak.fbcdn.net\/rsrc.php\/yD\/r\/aS8ecmYRys0.gif", 
      "fb_object_type": "album", 
      "fb_object_id": "2166659457206182932" 
     }, 
     "action_links": null, 
     "privacy": { 
      "value": "" 
     } 
    }, 
... 
] 

Вот мой PHP код:

foreach ($data as $result) { 
echo '<div class="title"><a href="'.htmlspecialchars($result->link).'">'.htmlspecialchars($result->message).'<br />'.htmlspecialchars($result->description).'<br />'.htmlspecialchars($result->caption).'</a><br />'; 
if(!empty($result->attachment->properties[0]->text)){ 
    foreach ($result->attachment->properties[0] as $properties) { 
echo htmlspecialchars($properties->name).'<br /><a href="'.htmlspecialchars($properties->href).'">'.htmlspecialchars($properties->text).'</a></div>'; 
    } 
} 
if(!empty($result->attachment->media)){ 
echo '<div class="image"><a href="'.htmlspecialchars($result->attachment->media[0]->href).'"><img src="'.htmlspecialchars($result->attachment->media[0]->src).'" /><br>'.htmlspecialchars($result->attachment->media[0]->type).'</a></div>'; 
} 
} 
+0

Можете ли вы опубликовать результаты var_dump ($ result) (если у вас нет xdebug, посмотрите источник, чтобы получить разрывы строк). – Naatan

ответ

1

Если бы я тебя, я бы просто заставить декодирование ассоциировать массив на true как второй аргумент json_decode. Если вы не можете или не хотите, чтобы сделать это, попробуйте к нему доступ, как это:

$result->attachment->media->{0}->href

0

Использование json_decode($the_data, true); вместо json_decode($the_data);, что так оно и будет возвращать вам ассоциативный массив вместо StdClass.

Смежные вопросы