-1

重複の可能性:
foreach()に無効な引数が指定されました

だから、私はこの機能を持っています:

        <?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();
        ?>

これらのエラーがたくさん発生します:FastCGIがstderrで送信されました: "PHPメッセージ:PHP警告:foreach()に無効な引数が指定されました。問題の行は次のとおりです。

foreach ($jsonData->data as $key=>$value) {

それのどこが悪いんだい?

よろしくお願いします!:)

4

2 に答える 2

1

使用json_decodeすると、オブジェクトを取得します。配列が必要な場合はjson_decode、オブジェクトまたは配列を返すためのトグルである2番目の引数を使用できます。true配列を与えます。

新しい配列を使用するには、コードを調整する必要があります。

役立つかもしれないもう1つのことは(オブジェクトの内容がわからないため、わかりません)、オブジェクトを配列にキャストすることです(ただし、これはちょっとしたハックです;)):

foreach ((array) $jsonData->data as $key=>$value) {
于 2012-11-02T01:20:03.380 に答える
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 で取得するものが常に配列ではない場合に役立ちます。

配列であると思われる場合は、デバッグにのみ使用var_dump($jsonData->data);し、else で a を実行して、実際に得られたものを確認します

于 2012-11-02T01:11:54.033 に答える