2010-09-20 6 views
10

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

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 и т. Д.). Как я могу это сделать?

ответ

21

Вы можете использовать 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 
+0

Я выполнил 'json_decode ($ string, true);', однако у меня есть проблемы, называемые номером, на который ссылается массив. Например, число равно 2010091907, но когда я выдаю 'foreach ($ json-> 2010091907 как $ game)', я получаю ошибку 'Parse error: синтаксическая ошибка, неожиданная T_LNUMBER, ожидающая T_STRING или T_VARIABLE' – drewrockshard

+0

Используйте' $ json- > {'2010091907'} 'для 'незаконных' имен переменных. – Wrikken

+0

Практически там: 'foreach ($ json -> {'2010091907'} как $ game)', я получаю сообщение об ошибке: 'Предупреждение: неверный аргумент, предоставленный foreach()'. обратитесь к моему выходу выше для JSON для ARRAY. Мне нужно иметь возможность вызывать данные, и они кажутся рекурсивными массивами (не уверен, что это официально называется). – drewrockshard

2

Вы можете перемещаться по stdClass с foreach.

+2

Черт, ты прав. Почему у людей PHP не было приличия, чтобы заставить 'stdClass instanceof Traversable' истинно удивляться .... – Wrikken

Смежные вопросы