PHP / JSON - объект stdClass - PullRequest
       5

PHP / JSON - объект stdClass

10 голосов
/ 20 сентября 2010

Я все еще плохо знаком с массивами. Мне нужна помощь - у меня есть JSON, и я прогнал его через PHP, который в основном анализирует JSON и декодирует его следующим образом:

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
            )

Это на самом деле продолжается и продолжается - НО - моя проблема в части stdClass Object. Мне нужно иметь возможность вызывать это в цикле for, а затем перебирать каждый раздел (home, score, abbr, to и т. Д.). Как бы я пошел по этому поводу?

Ответы [ 2 ]

21 голосов
/ 20 сентября 2010

Вы можете использовать get_object_vars(), чтобы получить массив свойств объекта, или вызвать json_decode() с помощью json_decode($string,true);, чтобы получить ассоциативный массив.


Пример:

<?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;
}
?>

Выход:

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
3 голосов
/ 20 сентября 2010

Вы можете выполнить итерацию на stdClass с помощью foreach.

...