首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多维stdClass对象

多维stdClass对象
EN

Stack Overflow用户
提问于 2010-09-24 04:28:59
回答 3查看 1.2K关注 0票数 2

我有一个相当大的多维stdClass对象,它是用PHP从json提要输出的。

它大约有8到9个步骤深,我需要的数据大约是7个步骤。

我想知道我是否可以轻松地获取其中一个整体,而不是这样做:

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

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

这个是可能的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-24 04:41:20

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

代码语言:javascript
复制
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;
}

如何调用

代码语言:javascript
复制
$parsed_obj_arr = parseObjectArrayToArray($objectPassed);
票数 0
EN

Stack Overflow用户

发布于 2010-09-24 04:33:57

如果不搜索可能低效的东西,就不会。Json是一个结构化数据对象,其目的是消除类似这样的东西。

票数 0
EN

Stack Overflow用户

发布于 2010-09-24 04:48:45

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

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3782294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档