2010-09-20 17 views
10

Hala diziler için oldukça yeni. Bazı JSON var ve temelde JSON ayrıştırır ve aşağıdaki gibi deşifre bazı PHP ile çalıştırmak ettik - biraz yardıma ihtiyacım: Bu aslında uzayıp gidiyorPHP/JSON - stdClass Object

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 
      ) 

- AMA - benim sorundur stdClass Object parçası. Bunu bir for döngüsünde çağırabilmem ve sonra her bölümden (ev, skor, abbr, vs.) yinelemem gerekiyor. Bunun için nasıl giderim?

cevap

21

Sen nesne özelliklerinin dizisini almak için get_object_vars() kullanın veya bir ilişkisel dizi olsun json_decode($string,true); ile json_decode() çağırabilir.


Örnek:

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

Çıktı:

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

ben 'json_decode (gerçek $ dizesi) yapmış;', ancak, sorunlar dizisi için başvurulan numarasını aradım var. Örneğin, sayı 2010091907 ama 'foreach ($ oyun olarak $ json-> 2010091907)' kesilirken, ben 'ayrıştırma hatası hatası alıyorum: bekliyor, sözdizimi hatası, beklenmedik T_LNUMBER T_STRING veya T_VARIABLE' – drewrockshard

+0

Kullanım' $ json- > {'Yasadışı' değişken adları için {'2010091907'}. Neredeyse – Wrikken

+0

: 'foreach ($ json -> { '2010091907'} $ oyunu olarak)' ı hatayı alıyorum: 'Uyarı: foreach için verilen Geçersiz değişken()'. JSON için ARRAY için çıkışımı referans. Verileri arayabilmem gerekiyor ve bunlar özyinelemeli diziler gibi görünüyor (resmi olarak adlandırılanlardan emin değil). – drewrockshard

2

Sen foreach ile stdClass üzerinde yineleme yapabilirsiniz.

+2

Lanet olsun, haklısın. Neden PHP insanlar "stdClass instanceof Traversable" yapmak için bir dürüstlük var mı merak ediyorum .... – Wrikken

İlgili konular