Php 多维stdClass对象

Php 多维stdClass对象,php,Php,我用PHP从json提要输出了一个相当大的多维stdClass对象 它大约有8或9步深,我需要的数据大约有7步深 我想知道我是否可以轻松地抓住一个实体,而不是这样做: echo$data->one->two->anotherone->gettinglong->omg->hereweare 我这样说是因为数据结构可能会随着时间的推移而改变 这是可能的吗?不搜索可能效率低下的内容是不行的。 Json是一个结构化的数据对象,其目的是消除类似的内容。并非不搜索可能效率低下的内容。 Json是一个结构化数

我用PHP从json提要输出了一个相当大的多维stdClass对象

它大约有8或9步深,我需要的数据大约有7步深

我想知道我是否可以轻松地抓住一个实体,而不是这样做:

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

我这样说是因为数据结构可能会随着时间的推移而改变


这是可能的吗?

不搜索可能效率低下的内容是不行的。
Json是一个结构化的数据对象,其目的是消除类似的内容。

并非不搜索可能效率低下的内容。
Json是一个结构化数据对象,目的是消除类似的内容。

您可以尝试将对象解析为一个数组,并在数组中搜索所需的值,它只是在对象的每个级别上不断循环

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);

您可以尝试将对象解析为数组,并在数组中搜索所需的值,它只是在对象的每个级别上不断循环

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);

如果数据结构可以更改,但不经常更改,那么最好的办法是编写一个包装器对象,这样在更改时只需在单个点更改路径:

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

如果数据结构变化剧烈且持续,我会将json_解码为数组数组,并可能使用递归Filterator。

如果数据结构可以变化,但不经常变化,最好是编写一个包装器对象,这样在变化时只需在一个点上更改路径:

class MyDataWrapp {
   public $json;
   function __construct($jsonstring){
      $this->json = json_decode($jsonstring);
   }
   function getHereWeAre(){
       return $this->json->one->two->anotherone->gettinglong->omg->hereweare;
   }
}
如果数据结构发生了显著且持续的变化,我会将json_解码为数组数组,并可能使用RecursiveFilterator