2012-03-28 143 views
0

我收到一些數據,這些數據沒有很好的定義並且可能會發生變化(或者至少沒有正式的規範和屬性可能會被添加/刪除)。我無法控制以JSON形式接收的數據,然後將json_decode轉換爲匿名對象。多級對象中的變量變量

爲了理解數據,我想創建一些映射。假設數據定義的人,是這樣的:

$Data = json_decode($TheRawData); 

$Mappings->Personal['Firstname']="FirstName"; 
$Mappings->Personal['Employer']="Employment->CurrentEmployer"; 

其中,如果我是做手工這將意味着名字可以在$Data->FirstName被發現的用人單位是在$Data->Employer->CurrentEmployer

我想將映射的信息存儲在數據庫中以實現可維護性。不幸的是,當我試圖解析爲定義屬性的對象,如下圖所示:

foreach($Mappings->Personal as $Key=>$Value) { 
    print $Key . ": " . $Data->{$Value};  
} 

的名字完美的作品(如預期),但它不喜歡的第二項選擇,大概是因爲它跨越多個對象並需要重複查找。

有人可以告訴我,如果有任何方法我可以映射到我的對象的任意位置?

+0

$ Profile是從哪裏來的?我錯過了什麼嗎? – Pete 2012-03-28 10:33:34

+0

謝謝皮特。我現在改變了它。 - 基本 – Pete 2012-03-28 10:40:06

+1

@Pete - 道歉,我沒有刷新此頁面,所以沒有看到您的評論 - 我發現了錯誤並修復了它。以及發現,兩次:) – Basic 2012-03-28 11:24:34

回答

1

一個快速谷歌沒有任何用處,所以我不得不提出一些更迭代的東西。

$Data = json_decode($TheRawData); 

$Mappings->Personal['Firstname']=array("FirstName"); 
$Mappings->Personal['Employer']=array("Employment","CurrentEmployer"); 

foreach($Mappings->Personal as $Key=>$Value) { 
    $Result = $Data; 
    foreach($Value as $PropertyName) { 
     $Result = $Result->$PropertyName; 
    } 
    print $Key . ": " . $Result;  
} 

我沒有測試過這個,但沿着這些線路的東西應該適合你。

+0

這個工程,假設只有1層的嵌套 - 我最好能夠支持多個。我可以使用遞歸函數遍歷每個級別,但看起來非常混亂。 – Basic 2012-03-28 11:35:43

+0

並非如此。仔細看內圈。它需要$ Result,讀取請求的屬性,並將其分配給$ Result,從而提供您想要的遞歸。 – Gleeb 2012-03-28 11:39:54

+1

哇,在同一天早上錯過了評論和錯誤閱讀代碼 - 沒有一個好的開始。我認爲這樣可以很好地工作,謝謝。 – Basic 2012-03-28 11:52:14