Для целей моего веб-сайта мне нужно динамически создавать ключи объектов для моей древовидной структуры JSON во время выполнения. Моя структура вложена, и каждый родительский узел содержит массив дочерних узлов. Эта вложенная структура делает вещи довольно сложными и может сделать ключ очень длинным по мере того, как дерево становится глубже. Однако я не могу это изменить, так как это необходимо для плагина для рисования дерева, который я использую.
Вот что я ищу:
$tree->rootNode->{$varString}->title;
где $tree - это JSON, а $varString может содержать один элемент (например, children[0]) вплоть до более длинного пути (например, children[0]->children[1]->children[1]). Когда я жестко кодирую эти ключи, все работает нормально, но это не позволяет мне генерировать ключи во время выполнения.
Проблема, похоже, связана с использованием строки для хранения ключа. Я могу использовать переменную для хранения одного имени объекта, но не индекса [0] или пути нескольких объектов с помощью оператора ->.
Есть ли способ сделать это, или мне придется использовать совершенно другой подход?
У меня есть внешний файл Json, содержащий структуру, которая извлекается и затем сохраняется в $ tree. Я не могу изменить структуру, так как это необходимо для плагина для рисования дерева, который я использую. Моя проблема в том, что мне нужно добавлять новую информацию в эту структуру во время выполнения, и мне нужно иметь возможность сгенерировать соответствующий ключ для этого. Я могу указать правильный путь в зависимости от действий пользователя и сохранить его в переменной $ varString, но я не могу использовать эту переменную для создания ключа. Я отредактирую свой вопрос, чтобы было понятнее.
Прочтите дубликат. Вам нужно рекурсивно перебирать ключ дерева по ключу. ->{$varString} означает, что вы пытаетесь получить доступ к ключу с именем "children[0]->children[1]->children[1]", который, я сомневаюсь, является правильным именем ключа.
Я понимаю, что ключ выглядит хитроумным, но это реальная структура. При жестком кодировании этого ключа все работает нормально. Моя проблема заключается в том, чтобы просто использовать строку как часть ключа. Я мог бы изучить итерацию по своему дереву, но я хочу прибегнуть к этому только в том случае, если я действительно не могу использовать строку как часть моего ключа.
Любой foo->$bar всегда будет означать, что он будет искать ключ $bar на объекте foo. Он никогда не будет оценивать, может ли $bar выглядеть как синтаксис нотации доступа к вложенным объектам PHP, и расширять его до foo->$bar[0]->$bar[1]->$bar[2]->.... Это не так. Читать. Файл. Дубликат.
Спасибо. Все, что я хотел знать, - возможно ли это или нет.






Это не похоже на правильно спроектированную структуру .... почему бы вам вместо этого не использовать объекты?