Извлекать данные из объекта на основе параметров короткого кода (path)

#php #wordpress #object

#php #wordpress #объект

Вопрос:

Я работаю над пользовательской функцией для WordPress .

У меня есть большой объект:

 {
  "name": "Jon",
  "personal_information": {
            "Age": "18",
            "School": 'School_name',
            },
  "rewards": {
        "soccer": {
              "display": 'Hello soccer',
              "rate": 5,
              "type": 'soccer',
              },
          }
  } 
  

Пользователь может получить эту информацию с помощью шорткода:

 [info name] // Will display "Jon"

[info rewards soccer display] // Will display "Hello soccer"
  

Таким образом, шорткод на самом деле является массивом:

 info = Array ()
     [0] -> rewards
     [1] -> soccer
     [2] -> display
  

И для получения данных из объекта я делаю:

 echo $object -> $info[0]->$info[1]->$info[2];
  

Есть ли какой-нибудь способ сделать то же самое через цикл?

Поэтому у меня не будет чего-то вроде $info[0]->$info[1]->$info[2];

Ответ №1:

Вы можете использовать while цикл как:

 $info = json_decode('{"name": "Jon","personal_information": {"Age": "18","School": "School_name"},"rewards": {"soccer": {"display": "Hello soccer","rate": 5,"type": "soccer"}}}');

 $arr = explode(" ", "info rewards soccer display");
 array_shift($arr); // remove the name of the object - info
 $res = $info;
 while (count($arr)) {
     $key = array_shift($arr);
     $res = $res->$key;
 }
 echo $res; // prints Hello soccer