Переменные Переменные в многоуровневых объектах - PullRequest
0 голосов
/ 28 марта 2012

Мне передают некоторые данные, которые не определены должным образом и могут быть изменены (или, по крайней мере, нет формальной спецификации, и свойства могут быть добавлены / удалены). У меня нет контроля над данными, которые я получаю как 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};    
}

Имя отлично работает (как и ожидалось), но ему не нравится селектор для второй записи, предположительно, потому что он охватывает несколько объектов и потребует повторных поисков.

Может кто-нибудь сказать мне, могу ли я как-то сопоставить произвольные местоположения в моем объекте?

1 Ответ

1 голос
/ 28 марта 2012

Быстрый Google не нашел ничего полезного, поэтому мне пришлось бы предложить что-то более итеративное.

$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;    
}

Я не проверял это, но что-то в этом роде должно работать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...