2010-09-23 98 views
2

我有一個相當大的多維stdClass對象從PHP的json提要輸出。多維stdClass對象

它去約8或9級深,我需要的數據是在大約7步

我想知道如果我可以很容易地抓住entires之一,而不是這樣做:

echo $ data-> one-> two-> anotherone-> gettinglong-> omg-> hereweare;

我在說這個,因爲數據結構可能隨時間而改變。

這可能嗎?

回答

0

您可以嘗試將對象解析爲數組,並在數組中搜索想要的值,它只是在對象的每個級別上循環。

function parseObjectArrayToArray($objectPassed, &$in_arr = array()) { 
    foreach($objectPassed as $element) { 
     if(is_object($element) || is_array($element)) { 
      parseObjectArrayToArray($element,$in_arr); 
     } else { 
      // XML is being passed, need to strip it 
      $element = strip_tags($element); 

      // Trim whitespace 
      $element = trim($element); 

      // Push to array 
      if($element != '' && !in_array($element,$in_arr)) {     
        $in_arr[] = $element; 
      } 
     } 
    } 
    return $in_arr; 
} 

如何調用

$parsed_obj_arr = parseObjectArrayToArray($objectPassed); 
0

不是沒有搜索什麼可能是低效的。 Json是一個結構化的數據對象,目的是消除像這樣的事情。

0

如果數據結構可以改變,但不經常,最好的辦法是寫一個包裝對象,所以你將只在改變路徑在改變單點:

class MyDataWrapp { 
    public $json; 
    function __construct($jsonstring){ 
     $this->json = json_decode($jsonstring); 
    } 
    function getHereWeAre(){ 
     return $this->json->one->two->anotherone->gettinglong->omg->hereweare; 
    } 
} 

如果數據結構顯着和不斷的變化,我json_decode作爲數組的數組,並可能使用RecursiveFilterIterator