1

I have a complicated structure of returned by an URL in JSON format, i have got the reponse which I can view through var_dump, Now I have this reponse,

{
  "groups": [],
  "total_pages": 1,
  "spots": [
    {
      "address": {
        "region": "TX",
        "locality": "Austin"
      },
      "name": "Dirty Bill's",
      "checkins_count": 646,
      "_image_url_200": "http://static.gowalla.com/categories/28-b0d41920d32839ce1ecd6641e5fc2c87-200.png",
      "image_url": "http://static.gowalla.com/categories/28-78c9b4d7d239784df49dc932f64a3519-100.png",
      "_image_url_50": "http://static.gowalla.com/categories/28-78c9b4d7d239784df49dc932f64a3519-100.png",
      "radius_meters": 50,
      "trending_level": 0,
      "users_count": 375,
      "url": "/spots/43711",
      "checkins_url": "/checkins?spot_id=43711",
      "lng": "-97.7495040214",
      "spot_categories": [
        {
          "name": "Dive Bar",
          "url": "/categories/28"
        }
      ],
      "foursquare_id": null,
      "highlights_url": "/spots/43711/highlights",
      "items_url": "/spots/43711/items",
      "items_count": 11,
      "strict_radius": false,
      "description": "AKA the Gnome Bar. Much Warmer than Key Bar.",
      "activity_url": "/spots/43711/events",
      "lat": "30.2696322356",
      "photos_count": 23
    },
    {
      "address": {
        "region": "TX",
        "locality": "Austin"
      },
      "name": "Austin Wellness Clinic",
      "checkins_count": 1,
      "_image_url_200": "http://static.gowalla.com/categories/118-b41c2ba96f1ffe99fc23f12f0ee3b960-200.png",
      "image_url": "http://static.gowalla.com/categories/118-5f9e72162abf3dcbc0108cdbdba6a29f-100.png",
      "_image_url_50": "http://static.gowalla.com/categories/118-5f9e72162abf3dcbc0108cdbdba6a29f-100.png",
      "radius_meters": 75,
      "trending_level": 0,
      "users_count": 1,
      "url": "/spots/7360448",
      "checkins_url": "/checkins?spot_id=7360448",
      "lng": "-97.7495133877",
      "spot_categories": [
        {
          "name": "Health & Fitness",
          "url": "/categories/118"
        }
      ],
      "foursquare_id": null,
      "highlights_url": "/spots/7360448/highlights",
      "items_url": "/spots/7360448/items",
      "items_count": 0,
      "strict_radius": false,
      "description": null,
      "activity_url": "/spots/7360448/events",
      "lat": "30.2695755256",
      "photos_count": 0
    },

I have used json_decode($response,true) to get a parse variable, now I am not sure as to how to loop through it. Any ideas?!

edit 1: The spots is an array[] which has an index 0. I want to loop though each name valu pair inside the spots array

5
  • 1
    What do you want to loop through? This isn't a question of parsing. Commented May 12, 2011 at 13:17
  • 1
    Loop it like a regular array, because it is. Commented May 12, 2011 at 13:17
  • what u want to make a loop?? please write your desired array Commented May 12, 2011 at 13:17
  • php.net/manual/en/control-structures.foreach.php or php.net/manual/en/control-structures.for.php Commented May 12, 2011 at 13:20
  • Do you want to convert the whole array in an flat array ? Commented May 12, 2011 at 13:24

4 Answers 4

3
<?php

$json = json_encode(
    array(
        'spots' => array(
            'bar' => 'baz',
            array(
                'quz' => 'foo',
                'bar' => 'baz'
            )
        )
    )
);

$root = json_decode( $json, true );

function read( $array ) {
    foreach( (array) $array as $key => $value ) {
        if( is_array( $value ) ) {
            read( $array );
        }
        echo "$key = $value\n";
    }
}

foreach( $root['spots'] as $spot ) {
    read( $spot );
}

This should give you all the information inside the spot array.

EDIT: Now with actually checked syntax, it works.

Sign up to request clarification or add additional context in comments.

1 Comment

Hi. Yeah, sorry, missed an } for the foreach, so it appeared. Anyway, it now works.
2
$result = json_decode($response,true);

foreach($result['spots'] as $spot)
{
    echo $spot['address']['locality'];
}

Comments

2

Or try this one:

$result = json_decode($response,true);
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($result));
foreach($iterator as $key=>$value) {
        echo "<b>".$key."</b><br />".$value."<br />";
}

This will convert a complex associative array in a simple array for looping.
Hope this helps.

Comments

0

You wouldn't loop through that, you'd use recursion to get through it. You need to write a function that can call itself, passing different branches of that structure to itself as the arguments. This might help you with PHP recursion.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.