所以,我有这个功能:
<?php
function get_instagram($user_id=15203338,$count=6,$width=190,$height=190){
$url = 'https://api.instagram.com/v1/users/'.$user_id.'/media/recent/?access_token=13137.f59def8.1a759775695548999504c219ce7b2ecf&count='.$count;
// Let's create a cache
$cache = './wp-content/themes/multiformeingegno/instagram_json/'.sha1($url).'.json';
if(file_exists($cache) && filemtime($cache) > time() - 1000){
// If a cache file newer than 1000 seconds exist, use that
$jsonData = json_decode(file_get_contents($cache));
} else {
$jsonData = json_decode((file_get_contents($url)));
file_put_contents($cache,json_encode($jsonData));
}
$result = '<div id="instagram">'.PHP_EOL;
foreach ($jsonData->data as $key=>$value) {
$title = (!empty($value->caption->text))?' '.$value->caption->text:'...';
$location = (!empty($value->location->name))?' presso '.$value->location->name:null;
$result .= "\t".'<a class="fancybox" data-fancybox-group="gallery" href="'.$value->images->standard_resolution->url.'"><img src="'.$value->images->low_resolution->url.'" alt="'.$value->caption->text.'" width="'.$width.'" height="'.$height.'" /></a>
<div style="display: none;">'.htmlentities($title, ENT_QUOTES, "UTF-8").'<br><em style="font-size:11px">Scattata il '.htmlentities(strftime('%e %B %Y alle %R', $value->caption->created_time + 7200)).' '.htmlentities($location).' (<a target="_blank" style="color:darkgrey" rel="nofollow" href="http://maps.google.com/maps?q='.htmlentities($value->location->latitude).',+'.htmlentities($value->location->longitude).'">mappa</a>)</em></div>'.PHP_EOL;
}
$result .= '</div>'.PHP_EOL;
return $result;
}
echo get_instagram();
?>
我收到了很多这些错误:在stderr中发送的FastCGI:“PHP消息:PHP警告:为foreach()提供的参数无效。问题的关键是
foreach ($jsonData->data as $key=>$value) {
这有什么问题?
先谢谢你们! :)
答案 0 :(得分:1)
当您使用json_decode
时,您会得到一个对象。如果你想要一个数组,你可以使用json_decode
的第二个参数,它是一个用于返回对象或数组的切换器。 true
给出数组。
您需要调整代码才能使用新阵列。
可能有帮助的另一件事(不确定,因为我不知道对象中有什么),是将对象强制转换为数组(但这有点像黑客;)):
foreach ((array) $jsonData->data as $key=>$value) {
答案 1 :(得分:0)
在你的foreach之前尝试以下方法:
if(is_array($jsonData->data)){
// Do the for each
} else {
// It wasn't an array so do something else
// Like an error message or w/e
}
当你在json中得到的东西并不总是数组时,这很有用。
如果假设它是一个数组,那么只用它进行调试,然后在else中做一个var_dump($jsonData->data);
来查看你实际得到的数据