1

次のコードでjsonを返すようにInstagramAPIにクエリを実行しています。

$instagramClientID = '9110e8c268384cb79901a96e3a16f588';

$api = 'https://api.instagram.com/v1/tags/zipcar/media/recent?client_id='.$instagramClientID; //api request (edit this to reflect tags)

$response = get_curl($api); //change request path to pull different photos

だから私はjsonをデコードしたい

if($response){
    // Decode the response and build an array
    foreach(json_decode($response)->data as $item){
...

したがって、ここで、上記の配列の内容を特定のjson形式(geojson)に再フォーマットしたいのですが、コードはおおよそ次のようになります。

array(
'type' => 'FeatureCollection',
'features' => array(
    array(
        'type' => 'Feature',
        'geometry' => array(
            'coordinates' => array(-94.34885, 39.35757),
            'type' => 'Point'
        ), // geometry
        'properties' => array(
            // latitude, longitude, id etc.
        ) // properties
    ), // end of first feature
    array( ... ), // etc.
) // features
)

次に、を使用json_encodeしてすべてを素敵なjsonファイルに戻し、サーバーにキャッシュします。

私の質問...上記のコードを使用してjsonをループする方法はありますか?array / jsonの外部構造は静的ですが、内部を変更する必要があります。

4

1 に答える 1

1

この場合、既存のデータ構造をインラインで置き換えるのではなく、新しいデータ構造を構築することをお勧めします。

例:

<?php
$instagrams = json_decode($response)->data;

$features = array();
foreach ( $instagrams as $instagram ) {
    if ( !$instagram->location ) {
        // Images aren't required to have a location and this one doesn't have one
        // Now what? 
        continue; // Skip?
    }

    $features[] = array(
        'type' => 'Feature',
        'geometry' => array(
            'coordinates' => array(
                $instagram->location->longitude, 
                $instagram->location->latitude
            ),
            'type' => 'Point'
        ),
        'properties' => array(
            'longitude' => $instagram->location->longitude,
            'latitude' => $instagram->location->latitude,
            // Don't know where title comes from
            'title' => null,
            'user' => $instagram->user->username,
             // No idea where id comes from since instagram's id seems to belong in instagram_id
            'id' => null,
            'image' => $instagram->images->standard_resolution->url,
            // Assuming description maps to caption
            'description' => $instagram->caption ? $instagram->caption->text : null,
            'instagram_id' => $instagram->id,
        )
    );
}

$results = array(
    'type' => 'FeatureCollection',
    'features' => $features,
);

print_r($results);
于 2012-04-18T04:12:36.440 に答える