多级对象中的变量变量

时间:2012-03-28 10:29:17

标签: php oop variables

我正在递交一些数据,这些数据没有明确定义并且可能会发生变化(或者至少没有正式的规范和属性可能被添加/删除)。我无法控制作为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};    
}

firstname完美运行(如预期的那样),但它不喜欢第二个条目的选择器,可能是因为它跨越多个对象并需要重复查找。

有人可以告诉我是否有任何方法可以映射到我对象中的任意位置?

1 个答案:

答案 0 :(得分: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;    
}

我没有对此进行过测试,但这些方面的内容对您有用。