11

I'm pretty new to arrays still. I need some help - I have some JSON, and I've run it through some PHP that basically parses the JSON and decodes it as follows:

stdClass Object
(
    [2010091907] => stdClass Object
        (
        [home] => stdClass Object
            (
                [score] => stdClass Object
                    (
                        [1] => 7
                        [2] => 17
                        [3] => 10
                        [4] => 7
                        [5] => 0
                        [T] => 41
                    )

                [abbr] => ATL
                [to] => 2
            )

This actually goes on and on - BUT - my problem is the stdClass Object part. I need to be able to call this in a for loop and then iterate through each section (home, score, abbr, to, etc). How would I go about this?

2 Answers 2

26

You can use get_object_vars() to get an array of the object's properties, or call json_decode() with json_decode($string,true); to get an associative array.


Example:

<?php
$foo = array('123456' =>
 array('bar' =>
        array('foo'=>1,'bar'=>2)));


//as object
var_dump($opt1 = json_decode(json_encode($foo)));

echo $opt1->{'123456'}->bar->foo;

foreach(get_object_vars($opt1->{'123456'}->bar) as $key => $value){
    echo $key.':'.$value.PHP_EOL;
}

//as array
var_dump($opt2 = json_decode(json_encode($foo),true));

echo $opt2['123456']['bar']['foo'];

foreach($opt2['123456']['bar'] as $key => $value){
    echo $key.':'.$value.PHP_EOL;
}
?>

Output:

object(stdClass)#1 (1) {
  ["123456"]=>
  object(stdClass)#2 (1) {
    ["bar"]=>
    object(stdClass)#3 (2) {
      ["foo"]=>
      int(1)
      ["bar"]=>
      int(2)
    }
  }
}
1
foo:1
bar:2

array(1) {
  [123456]=>
  array(1) {
    ["bar"]=>
    array(2) {
      ["foo"]=>
      int(1)
      ["bar"]=>
      int(2)
    }
  }
}
1
foo:1
bar:2
Sign up to request clarification or add additional context in comments.

10 Comments

I have done the json_decode($string,true);, however, I have issues called the number referenced for the array. For example, the number is 2010091907 but when I issue foreach ($json->2010091907 as $game), I get the error Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE
Use $json->{'2010091907'} for 'illegal' variable names.
Almost there: foreach ($json->{'2010091907'} as $game), I get the error: Warning: Invalid argument supplied for foreach(). reference my output above for the JSON to ARRAY. I need to be able to call the data and these seem to be recursive arrays (not sure what that's officially called).
Have you just tried the json_decode($string,true); route? Much simpler then keep casting them to an array...
I'm not sure I follow - I'm recieving the JSON via a URL. I'm then placing the whole JSON output into an ARRAY (via json_decode($data,true);. From there, I'm wanting to iterate through the array contents and call certain data from the array. Could you provide some code, as I might be doing this all wrong.
|
3

You can iterate on the stdClass with foreach.

1 Comment

Damn, you're right. Why didn't the PHP people have the decency to make stdClass instanceof Traversable true I wonder....

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.