我有一個相當大的多維stdClass對象從PHP的json提要輸出。多維stdClass對象
它去約8或9級深,我需要的數據是在大約7步
我想知道如果我可以很容易地抓住entires之一,而不是這樣做:
echo $ data-> one-> two-> anotherone-> gettinglong-> omg-> hereweare;
我在說這個,因爲數據結構可能隨時間而改變。
這可能嗎?
我有一個相當大的多維stdClass對象從PHP的json提要輸出。多維stdClass對象
它去約8或9級深,我需要的數據是在大約7步
我想知道如果我可以很容易地抓住entires之一,而不是這樣做:
echo $ data-> one-> two-> anotherone-> gettinglong-> omg-> hereweare;
我在說這個,因爲數據結構可能隨時間而改變。
這可能嗎?
您可以嘗試將對象解析爲數組,並在數組中搜索想要的值,它只是在對象的每個級別上循環。
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);
不是沒有搜索什麼可能是低效的。 Json是一個結構化的數據對象,目的是消除像這樣的事情。
如果數據結構可以改變,但不經常,最好的辦法是寫一個包裝對象,所以你將只在改變路徑在改變單點:
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
。