我有一个相当大的多维stdClass对象,它是用PHP从json提要输出的。
它大约有8到9个步骤深,我需要的数据大约是7个步骤。
我想知道我是否可以轻松地获取其中一个整体,而不是这样做:
echo $data->one->two->anotherone->gettinglong->omg->hereweare;
我这么说是因为数据结构可能会随着时间的推移而改变。
这个是可能的吗?
发布于 2010-09-24 04:41:20
您可以尝试将对象解析为一个数组,并在该数组中搜索所需的值,它只是不断循环遍历对象的每一层。
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);发布于 2010-09-24 04:33:57
如果不搜索可能低效的东西,就不会。Json是一个结构化数据对象,其目的是消除类似这样的东西。
发布于 2010-09-24 04:48:45
如果数据结构可以更改,但不经常更改,那么最好的方法是编写一个包装器对象,这样在更改时只需在单个点更改路径:
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。
https://stackoverflow.com/questions/3782294
复制相似问题